<!DOCTYPE HTML><html><head><title>Marathon REST API documentation</title><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta name="generator" content="https://github.com/kevinrenskers/raml2html 2.4.0"><link rel="stylesheet" href="https://netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css"><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/8.1/styles/default.min.css"><script type="text/javascript" src="https://code.jquery.com/jquery-1.11.0.min.js"></script><script type="text/javascript" src="https://netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/8.1/highlight.min.js"></script><script type="text/javascript">
      $(document).ready(function() {
        $('.page-header pre code, .top-resource-description pre code').each(function(i, block) {
          hljs.highlightBlock(block);
        });

        $('[data-toggle]').click(function() {
          var selector = $(this).data('target') + ' pre code';
          $(selector).each(function(i, block) {
            hljs.highlightBlock(block);
          });
        });

        // open modal on hashes like #_action_get
        $(window).bind('hashchange', function(e) {
          var anchor_id = document.location.hash.substr(1); //strip #
          var element = $('#' + anchor_id);

          // do we have such element + is it a modal?  --> show it
          if (element.length && element.hasClass('modal')) {
            element.modal('show');
          }
        });

        // execute hashchange on first page load
        $(window).trigger('hashchange');

        // remove url fragment on modal hide
        $('.modal').on('hidden.bs.modal', function() {
          try {
            if (history && history.replaceState) {
                history.replaceState({}, '', '#');
            }
          } catch(e) {}
        });
      });
    </script><style>
      .hljs {
        background: transparent;
      }
      .parent {
        color: #999;
      }
      .list-group-item > .badge {
        float: none;
        margin-right: 6px;
      }
      .panel-title > .methods {
        float: right;
      }
      .badge {
        border-radius: 0;
        text-transform: uppercase;
        width: 70px;
        font-weight: normal;
        color: #f3f3f6;
        line-height: normal;
      }
      .badge_get {
        background-color: #63a8e2;
      }
      .badge_post {
        background-color: #6cbd7d;
      }
      .badge_put {
        background-color: #22bac4;
      }
      .badge_delete {
        background-color: #d26460;
      }
      .badge_patch {
        background-color: #ccc444;
      }
      .list-group, .panel-group {
        margin-bottom: 0;
      }
      .panel-group .panel+.panel-white {
        margin-top: 0;
      }
      .panel-group .panel-white {
        border-bottom: 1px solid #F5F5F5;
        border-radius: 0;
      }
      .panel-white:last-child {
        border-bottom-color: white;
        -webkit-box-shadow: none;
        box-shadow: none;
      }
      .panel-white .panel-heading {
        background: white;
      }
      .tab-pane ul {
        padding-left: 2em;
      }
      .tab-pane h2 {
        font-size: 1.2em;
        padding-bottom: 4px;
        border-bottom: 1px solid #ddd;
      }
      .tab-pane h3 {
        font-size: 1.1em;
      }
      .tab-content {
        border-left: 1px solid #ddd;
        border-right: 1px solid #ddd;
        border-bottom: 1px solid #ddd;
        padding: 10px;
      }
      #sidebar {
        margin-top: 30px;
        padding-right: 5px;
        overflow: auto;
        height: 90%;
      }
      .top-resource-description {
        border-bottom: 1px solid #ddd;
        background: #fcfcfc;
        padding: 15px 15px 0 15px;
        margin: -15px -15px 10px -15px;
      }
      .resource-description {
        border-bottom: 1px solid #fcfcfc;
        background: #fcfcfc;
        padding: 15px 15px 0 15px;
        margin: -15px -15px 10px -15px;
      }
      .resource-description p:last-child {
        margin: 0;
      }
      .list-group .badge {
        float: left;
      }
      .method_description {
        margin-left: 85px;
      }
      .method_description p:last-child {
        margin: 0;
      }
      .list-group-item {
        cursor: pointer;
      }
      .list-group-item:hover {
        background-color: #f5f5f5;
      }
    </style></head><body data-spy="scroll" data-target="#sidebar"><div class="container"><div class="row"><div class="col-md-9" role="main"><div class="page-header"><h1>Marathon REST API documentation <small>version 2.0</small></h1><p></p></div><div class="panel panel-default"><div class="panel-heading"><h3 id="v2_apps" class="panel-title">/v2/apps</h3></div><div class="panel-body"><div class="panel-group"><div class="panel panel-white"><div class="panel-heading"><h4 class="panel-title"><a class="collapsed" data-toggle="collapse" href="#panel_v2_apps"><span class="parent"></span>/v2/apps</a> <span class="methods"><a href="#v2_apps_get"><span class="badge badge_get">get</span></a> <a href="#v2_apps_put"><span class="badge badge_put">put</span></a> <a href="#v2_apps_post"><span class="badge badge_post">post</span></a></span></h4></div><div id="panel_v2_apps" class="panel-collapse collapse"><div class="panel-body"><div class="list-group"><div onclick="window.location.href = '#v2_apps_get'" class="list-group-item"><span class="badge badge_get">get</span><div class="method_description"><p>Get the list of running applications. Several filters can be applied via the following query parameters.</p></div><div class="clearfix"></div></div><div onclick="window.location.href = '#v2_apps_put'" class="list-group-item"><span class="badge badge_put">put</span><div class="method_description"><p>Change multiple applications either by upgrading existing ones or creating new ones. If there is an update to an already running application, the application gets upgraded. All instances of this application get replaced by the new version. The order of dependencies will be applied correctly. The upgradeStrategy defines the behaviour of the upgrade. If the id of the application is not known, the application gets started. The order of dependencies will be applied correctly. It is possible to mix upgrades and installs. If you have more complex scenarios with upgrades, use the groups endpoint. Note&#58; This operation will create a deployment. The operation finishes, if the deployment succeeds. You can query the deployments endoint to see the status of the deployment.</p></div><div class="clearfix"></div></div><div onclick="window.location.href = '#v2_apps_post'" class="list-group-item"><span class="badge badge_post">post</span><div class="method_description"><p>Create and start a new application. Note&#58; This operation will create a deployment. The operation finishes, if the deployment succeeds. You can query the deployments endoint to see the status of the deployment.</p></div><div class="clearfix"></div></div></div></div></div><div class="modal fade" tabindex="0" id="v2_apps_get"><div class="modal-dialog"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button><h4 class="modal-title" id="myModalLabel"><span class="badge badge_get">get</span> <span class="parent"></span>/v2/apps</h4></div><div class="modal-body"><div class="alert alert-info"><p>Get the list of running applications. Several filters can be applied via the following query parameters.</p></div><ul class="nav nav-tabs"><li class="active"><a href="#v2_apps_get_request" data-toggle="tab">Request</a></li><li><a href="#v2_apps_get_response" data-toggle="tab">Response</a></li></ul><div class="tab-content"><div class="tab-pane active" id="v2_apps_get_request"><h3>Query Parameters</h3><ul><li><strong>cmd</strong>: <em>(string)</em><p>Filter the result to only return apps whose <code>cmd</code> field contains the given value</p><p><strong>Example</strong>:</p><pre>java</pre></li><li><strong>id</strong>: <em>(string)</em><p>Filter the result to only return apps whose <code>id</code> is or contains the given value</p><p><strong>Example</strong>:</p><pre>/us-east/database/memsql</pre></li><li><strong>label</strong>: <em>(string)</em><p>A label selector query contains one or more label selectors, which are comma separated. Marathon supports three types of selectors existence-based, equality-based and set-based. In the case of multiple selectors, all must be satisfied so comma separator acts as an AND logical operator. Labels and values must consist of alphanumeric characters plus <code>-</code> <code>_</code> and <code>.</code> <code>-A-Za-z0-9_.</code>. Any other character is possible, but must be escaped with a backslash character.</p><ul><li><code>Existence based Selector Query</code> Matches the existence of a label<br>Example&#58; my_label,environment</li><li><code>Equality based Selector Query</code> Matches existence of labels and the (non) equality of the value.<br>Example&#58; environment==production, tier!=frontend</li><li><code>Set based Selector Query</code> Matches existence of labels and the (non) existence of the value in a given set<br>Example&#58; environment in (stage,production), tier notin (frontend, service)</li></ul><p><strong>Example</strong>:</p><pre>my_label, environment==production, tier!=frontend\ tier, deployed in (us, eu), deployed notin (aa, bb)</pre></li><li><strong>embed</strong>: <em>(one of apps.tasks, apps.count, apps.deployments, apps.lastTaskFailure, apps.failures, apps.taskStats - repeat: true)</em><p>Embeds nested resources that match the supplied path. You can specify this parameter multiple times with different values.</p><ul><li><code>apps.tasks</code> embed all tasks of each application<br>Note&#58; if this embed is definded, it automatically sets <code>apps.deployments</code> but this will change in a future release. Please define all embeds explicit.</li><li><code>apps.counts</code> embed all task counts (tasksStaged, tasksRunning, tasksHealthy, tasksUnhealthy)<br>Note&#58; currently embedded by default but this will change in a future release. Please define all embeds explicit.</li><li><code>apps.deployments</code> embed all deployment identifier, if the related app currently is in deployment.</li><li><code>apps.lastTaskFailure</code> embeds the lastTaskFailure for the application if there is one.</li><li><code>apps.failures</code> Shorthand for apps.lastTaskFailure, apps.tasks, apps.counts and apps.deployments.<br>Note&#58; deprecated and will be removed in future versions Please define all embeds explicit.</li><li><code>apps.taskStats</code> exposes task statatistics in the JSON.</li></ul><p><strong>Example</strong>:</p><pre>apps.tasks</pre></li></ul></div><div class="tab-pane" id="v2_apps_get_response"><h2>HTTP status code <a href="http://httpstatus.es/200" target="_blank">200</a></h2><p>The list of applications that match the defined filters</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{
  "apps": [
    {
      "id": "/myapp",
      "cmd": "env &amp;&amp; sleep 60",
      "args": null,
      "user": null,
      "env": {
        "LD_LIBRARY_PATH": "/usr/local/lib/myLib"
      },
      "instances": 3,
      "cpus": 0.1,
      "mem": 5,
      "disk": 0,
      "executor": "",
      "constraints": [
        [
          "hostname",
          "UNIQUE",
          ""
        ]
      ],
      "uris": [
        "https://raw.github.com/mesosphere/marathon/master/README.md"
      ],
      "storeUrls": [],
      "ports": [
        10013,
        10015
      ],
      "requirePorts": false,
      "backoffSeconds": 1,
      "backoffFactor": 1.15,
      "maxLaunchDelaySeconds": 3600,
      "container": null,
      "healthChecks": [],
      "dependencies": [],
      "upgradeStrategy": {
        "minimumHealthCapacity": 1,
        "maximumOverCapacity": 1
      },
      "labels": {},
      "acceptedResourceRoles": null,
      "version": "2015-09-25T15:13:48.343Z",
      "versionInfo": {
        "lastScalingAt": "2015-09-25T15:13:48.343Z",
        "lastConfigChangeAt": "2015-09-25T15:13:48.343Z"
      },
      "tasksStaged": 0,
      "tasksRunning": 0,
      "tasksHealthy": 0,
      "tasksUnhealthy": 0,
      "deployments": [
        {
          "id": "9538079c-3898-4e32-aa31-799bf9097f74"
        }
      ]
    }
  ]
}
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/401" target="_blank">401</a></h2><p>Unauthorized. Authentication is enabled and you did not provide enough or wrong information to authenticate that request.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{ "message": "Invalid username or password." }
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/403" target="_blank">403</a></h2><p>Forbidden. Authorization is granted but the identity provided does not have sufficient access rights to do that action.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{ "message": "Not Authorized to perform this action!" }
</code></pre></div></div></div></div></div></div><div class="modal fade" tabindex="0" id="v2_apps_put"><div class="modal-dialog"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button><h4 class="modal-title" id="myModalLabel"><span class="badge badge_put">put</span> <span class="parent"></span>/v2/apps</h4></div><div class="modal-body"><div class="alert alert-info"><p>Change multiple applications either by upgrading existing ones or creating new ones. If there is an update to an already running application, the application gets upgraded. All instances of this application get replaced by the new version. The order of dependencies will be applied correctly. The upgradeStrategy defines the behaviour of the upgrade. If the id of the application is not known, the application gets started. The order of dependencies will be applied correctly. It is possible to mix upgrades and installs. If you have more complex scenarios with upgrades, use the groups endpoint. Note&#58; This operation will create a deployment. The operation finishes, if the deployment succeeds. You can query the deployments endoint to see the status of the deployment.</p></div><ul class="nav nav-tabs"><li class="active"><a href="#v2_apps_put_request" data-toggle="tab">Request</a></li><li><a href="#v2_apps_put_response" data-toggle="tab">Response</a></li></ul><div class="tab-content"><div class="tab-pane active" id="v2_apps_put_request"><h3>Query Parameters</h3><ul><li><strong>force</strong>: <em>(boolean)</em><p>Only one deployment can be applied to one application at the same time. If the existing deployment should be canceled by this change, you can set force=true. Caution&#58; setting force=true will cancel the current deployment. This paramter should be used only, if the current deployment is unsuccessful!</p></li></ul><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>[{
  "id": "/test/sleep60",
  "cmd": "sleep 60",
  "cpus": 0.3,
  "instances": 2,
  "mem": 9,
  "dependencies": [ "/test/sleep120",  "/other/namespace/or/app"]
},{
  "id": "/test/sleep120",
  "cmd": "sleep 120",
  "cpus": 0.3,
  "instances": 2,
  "mem": 9
}]</code></pre></div><div class="tab-pane" id="v2_apps_put_response"><h2>HTTP status code <a href="http://httpstatus.es/200" target="_blank">200</a></h2><p>A deployment is started which has a unique deployment identifier. The related deployment can be fetched from the /v2/deployments endpoint. If the deployement is gone from the list of deployments, than this means it is finished. As long as the deployment runs, the effect of that change operation is visible only partially.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{
  "deploymentId": "5ed4c0c5-9ff8-4a6f-a0cd-f57f59a34b43",
  "version": "2015-09-29T15:59:51.164Z"
}
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/400" target="_blank">400</a></h2><p>The application definition provided in the body is not valid.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{"message":"Invalid JSON","details":[{"path":"/id","errors":["error.expected.jsstring"]}]}
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/401" target="_blank">401</a></h2><p>Unauthorized. Authentication is enabled and you did not provide enough or wrong information to authenticate that request.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{ "message": "Invalid username or password." }
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/403" target="_blank">403</a></h2><p>Forbidden. Authorization is granted but the identity provided does not have sufficient access rights to do that action.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{ "message": "Not Authorized to perform this action!" }
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/409" target="_blank">409</a></h2><p>There is an already deployed application with this name</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{"message":"An app with id [/existing_app] already exists."}
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/422" target="_blank">422</a></h2><p>The entity send can not be preocessed, since there are validation errors</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{
  "message": "Object is not valid",
  "details": [
    {
      "path": "/upgradeStrategy/minimumHealthCapacity",
      "errors": [
        "is greater than 1"
      ]
    }
  ]
}
</code></pre></div></div></div></div></div></div><div class="modal fade" tabindex="0" id="v2_apps_post"><div class="modal-dialog"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button><h4 class="modal-title" id="myModalLabel"><span class="badge badge_post">post</span> <span class="parent"></span>/v2/apps</h4></div><div class="modal-body"><div class="alert alert-info"><p>Create and start a new application. Note&#58; This operation will create a deployment. The operation finishes, if the deployment succeeds. You can query the deployments endoint to see the status of the deployment.</p></div><ul class="nav nav-tabs"><li class="active"><a href="#v2_apps_post_request" data-toggle="tab">Request</a></li><li><a href="#v2_apps_post_response" data-toggle="tab">Response</a></li></ul><div class="tab-content"><div class="tab-pane active" id="v2_apps_post_request"><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Schema</strong>:</p><pre><code>{
  "$schema": "http://json-schema.org/schema#",
  "additionalProperties": false,
  "definitions": {
    "pathType": {
      "type": "string",
      "pattern": "^(\\/?((\\.{2})|([a-z0-9][a-z0-9\\-.]*[a-z0-9]+)|([a-z0-9]*))($|\\/))+$",
      "minLength": 1
    }
  },
  "not": {
    "allOf": [
      {
        "required": [
          "cmd"
        ]
      },
      {
        "required": [
          "args"
        ]
      }
    ]
  },
  "properties": {
    "acceptedResourceRoles": {
      "items": {
        "type": "string"
      },
      "type": "array",
      "description": "Optional. A list of resource roles. Marathon considers only resource offers with roles in this list for launching tasks of this app. If you do not specify this, Marathon considers all resource offers with roles that have been configured by the `--default_accepted_resource_roles` command line flag. If no `--default_accepted_resource_roles` was given on startup, Marathon considers all resource offers. To register Marathon for a role, you need to specify the `--mesos_role` command line flag on startup. If you want to assign all resources of a slave to a role, you can use the `--default_role` argument when starting up the slave. If you need a more fine-grained configuration, you can use the `--resources` argument to specify resource shares per role. The Mesos master needs to be started with `--roles` followed by a comma-separated list of all roles you want to use across your cluster. See [the Mesos command line documentation](http://mesos.apache.org/documentation/latest/configuration/) for details."
    },
    "args": {
      "items": {
        "type": "string"
      },
      "type": "array",
      "description": "An array of strings that represents an alternative mode of specifying the command to run. This was motivated by safe usage of containerizer features like a custom Docker ENTRYPOINT. This args field may be used in place of cmd even when using the default command executor. This change mirrors API and semantics changes in the Mesos CommandInfo protobuf message starting with version `0.20.0`.  Either `cmd` or `args` must be supplied. It is invalid to supply both `cmd` and `args` in the same app."
    },
    "backoffFactor": {
      "minimum": 1.0,
      "type": "number",
      "description": "Configures exponential backoff behavior when launching potentially sick apps. This prevents sandboxes associated with consecutively failing tasks from filling up the hard disk on Mesos slaves. The backoff period is multiplied by the factor for each consecutive failure until it reaches maxLaunchDelaySeconds. This applies also to tasks that are killed due to failing too many health checks."
    },
    "backoffSeconds": {
      "description": "Configures exponential backoff behavior when launching potentially sick apps. This prevents sandboxes associated with consecutively failing tasks from filling up the hard disk on Mesos slaves. The backoff period is multiplied by the factor for each consecutive failure until it reaches maxLaunchDelaySeconds. This applies also to tasks that are killed due to failing too many health checks.",
      "minimum": 0,
      "type": "integer"
    },
    "cmd": {
      "description": "The command that is executed.  This value is wrapped by Mesos via `/bin/sh -c ${app.cmd}`.  Either `cmd` or `args` must be supplied. It is invalid to supply both `cmd` and `args` in the same app.",
      "type": "string",
      "minLength": 1
    },
    "constraints": {
      "type": "array",
      "items": {
        "type": "array",
        "items": [
          {
            "type": "string"
          },
          {
            "type": "string",
            "enum": ["UNIQUE", "CLUSTER", "GROUP_BY", "LIKE", "UNLIKE"]
          },
          {
            "type": "string"
          }
        ],
        "minItems": 2,
        "additionalItems": false
      },
      "description": "Valid constraint operators are one of UNIQUE, CLUSTER, GROUP_BY, LIKE, UNLIKE."
    },
    "container": {
      "additionalProperties": false,
      "properties": {
        "docker": {
          "additionalProperties": false,
          "properties": {
            "forcePullImage": {
              "type": "boolean",
              "description": "The container will be pulled, regardless if it is already available on the local system."
            },
            "image": {
              "type": "string",
              "minLength": 1,
              "description": "The name of the docker image to use."
            },
            "network": {
              "type": "string",
              "description": "The networking mode, this container should operate in. One of BRIDGED|HOST|NONE",
              "enum": ["BRIDGE", "HOST", "NONE"]
            },
            "parameters": {
              "type": "array",
              "description": "Allowing arbitrary parameters to be passed to docker CLI. Note that anything passed to this field is not guaranteed to be supported moving forward, as we might move away from the docker CLI.",
              "items": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "key": {
                    "type": "string",
                    "minLength": 1,
                    "description": "Key of this parameter"
                  },
                  "value": {
                    "type": "string",
                    "description": "Value of this parameter"
                  }
                },
                "required": [ "key", "value" ]
              }
            },
            "portMappings": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "containerPort": {
                    "type": "integer",
                    "description": "Refers to the port the application listens to inside of the container. It is optional and now defaults to 0, in which case Marathon assigns the container port the same value as the assigned hostPort. This is especially useful for apps that advertise the port they are listening on to the outside world for P2P communication. Without containerPort: 0 they would erroneously advertise their private container port which is usually not the same as the externally visible host port.",
                    "maximum": 65535,
                    "minimum": 0
                  },
                  "hostPort": {
                    "type": "integer",
                    "description": "Retains the traditional meaning in Marathon, which is a random port from the range included in the Mesos resource offer. The resulting host ports for each task are exposed via the task details in the REST API and the Marathon web UI. hostPort is optional and defaults to 0.",
                    "maximum": 65535,
                    "minimum": 0
                  },
                  "labels": {
                    "type": "object",
                    "description": "This can be used to add metadata to be interpreted by external applications such as firewalls.",
                    "additionalProperties": {
                      "type": "string"
                    }
                  },
                  "name": {
                    "type": "string",
                    "description": "Name of the service hosted on this port. If provided, it must be unique over all port mappings."
                  },
                  "protocol": {
                    "type": "string",
                    "enum": ["tcp", "udp"],
                    "description": "Protocol of the port (one of [&#39;tcp&#39;, &#39;udp&#39;]). Defaults to &#39;tcp&#39;."
                  },
                  "servicePort": {
                    "type": "integer",
                    "description": "Is a helper port intended for doing service discovery using a well-known port per service. The assigned servicePort value is not used/interpreted by Marathon itself but supposed to used by load balancer infrastructure. See Service Discovery Load Balancing doc page. The servicePort parameter is optional and defaults to 0. Like hostPort, If the value is 0, a random port will be assigned. If a servicePort value is assigned by Marathon then Marathon guarantees that its value is unique across the cluster. The values for random service ports are in the range [local_port_min, local_port_max] where local_port_min and local_port_max are command line options with default values of 10000 and 20000, respectively.",
                    "maximum": 65535,
                    "minimum": 0
                  }
                }
              }
            },
            "privileged": {
              "type": "boolean",
              "description": "Run this docker image in privileged mode."
            }
          },
          "required": [
            "image"
          ],
          "type": "object"
        },
        "type": {
          "type": "string",
          "description": "Supported container types at the moment are DOCKER and MESOS.",
          "enum": ["MESOS", "DOCKER"]
        },
        "volumes": {
          "items": {
            "additionalProperties": false,
            "properties": {
              "containerPath": {
                "type": "string",
                "description": "The path of the volume in the container",
                "minLength": 1
              },
              "hostPath": {
                "type": "string",
                "description": "The path of the volume on the host",
                "minLength": 1
              },
              "persistent": {
                "additionalProperties": false,
                "properties": {
                  "size": {
                    "type": "integer",
                    "description": "The size of the persistent volume in MiB",
                    "minimum": 0
                  }
                },
                "type": "object"
              },
              "mode": {
                "type": "string",
                "description": "Possible values are RO for ReadOnly and RW for Read/Write",
                "enum": ["RO", "RW"]
              }
            },
            "type": "object"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "cpus": {
      "type": "number",
      "description": "The number of CPU shares this application needs per instance. This number does not have to be integer, but can be a fraction.",
      "minimum": 0
    },
    "dependencies": {
      "type": "array",
      "description": "A list of services upon which this application depends. An order is derived from the dependencies for performing start/stop and upgrade of the application. For example, an application /a relies on the services /b which itself relies on /c. To start all 3 applications, first /c is started than /b than /a.",
      "items": {
        "$ref": "#/definitions/pathType"
      }
    },
    "disk": {
      "type": "number",
      "description": "How much disk space is needed for this application. This number does not have to be an integer, but can be a fraction.",
      "minimum": 0
    },
    "env": {
      "patternProperties": {
        ".*": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "executor": {
      "type": "string",
      "description": "The executor to use to launch this application. Different executors are available. The simplest one (and the default if none is given) is //cmd, which takes the cmd and executes that on the shell level.",
      "pattern": "^(|\\/\\/cmd|\\/?[^\\/]+(\\/[^\\/]+)*)$"
    },
    "fetch": {
      "type": "array",
      "description": "Provided URIs are passed to Mesos fetcher module and resolved in runtime.",
      "items": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "uri": {
            "type": "string",
            "description": "URI to be fetched by Mesos fetcher module"
          },
          "executable": {
            "type": "boolean",
            "description": "Set fetched artifact as executable"
          },
          "extract": {
            "type": "boolean",
            "description": "Extract fetched artifact if supported by Mesos fetcher module"
          },
          "cache": {
            "type": "boolean",
            "description": "Cache fetched artifact if supported by Mesos fetcher module"
          }
        },
        "required": [ "uri" ]
      }
    },
    "healthChecks": {
      "items": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "command": {
            "type": "object",
            "items": {
              "additionalProperties": false,
              "properties": {
                "value": {
                  "type": "string",
                  "description": "The health check command to execute."
                }
              }
            }
          },
          "gracePeriodSeconds": {
            "type": "integer",
            "description": "Health check failures are ignored within this number of seconds of the task being started or until the task becomes healthy for the first time.",
            "minimum": 0
          },
          "ignoreHttp1xx": {
            "type": "boolean",
            "description": "Ignore HTTP 1xx responses."
          },
          "intervalSeconds": {
            "type": "integer",
            "description": "Number of seconds to wait between health checks.",
            "minimum": 0
          },
          "maxConsecutiveFailures": {
            "type": "integer",
            "description": "Number of consecutive health check failures after which the unhealthy task should be killed.",
            "minimum": 0
          },
          "path": {
            "type": "string",
            "description": "Path to endpoint exposed by the task that will provide health status. Example: /path/to/health. Note: only used if protocol == HTTP[S]."
          },
          "port": {
            "type": "integer",
            "description": "The specific port to connect to. In case of dynamic ports, see portIndex.",
            "maximum": 65535,
            "minimum": 0
          },
          "portIndex": {
            "type": "integer",
            "description": "Index in this app&#39;s ports array to be used for health requests. An index is used so the app can use random ports, like [0, 0, 0] for example, and tasks could be started with port environment variables like $PORT1.",
            "minimum": 0
          },
          "protocol": {
            "type": "string",
            "description": "Protocol of the requests to be performed. One of HTTP, HTTPS, TCP or COMMAND.",
            "enum": ["HTTP", "HTTPS", "TCP", "COMMAND"]
          },
          "timeoutSeconds": {
            "type": "integer",
            "description": "Number of seconds after which a health check is considered a failure regardless of the response.",
            "minimum": 0
          }
        }
      },
      "type": "array"
    },
    "id": {
      "$ref": "#/definitions/pathType",
      "description": "Unique identifier for the app consisting of a series of names separated by slashes. Each name must be at least 1 character and may only contain digits (`0-9`), dashes (`-`), dots (`.`), and lowercase letters (`a-z`). The name may not begin or end with a dash."
    },
    "instances": {
      "type": "integer",
      "description": "The number of instances of this application to start. Please note: this number can be changed any time as needed to scale the application.",
      "minimum": 0
    },
    "labels": {
      "type": "object",
      "description": "Attaching metadata to apps can be useful to expose additional information to other services, so we added the ability to place labels on apps (for example, you could label apps staging and production to mark services by their position in the pipeline).",
      "additionalProperties": {
        "type": "string"
      }
    },
    "maxLaunchDelaySeconds": {
      "type": "integer",
      "description": "Configures exponential backoff behavior when launching potentially sick apps. This prevents sandboxes associated with consecutively failing tasks from filling up the hard disk on Mesos slaves. The backoff period is multiplied by the factor for each consecutive failure until it reaches maxLaunchDelaySeconds. This applies also to tasks that are killed due to failing too many health checks.",
      "minimum": 0
    },
    "mem": {
      "type": "number",
      "description": "The amount of memory in MB that is needed for the application per instance.",
      "minimum": 0
    },
    "ipAddress": {
      "type": "object",
      "description": "If an application definition includes the &#39;ipAddress&#39; field, then Marathon will request a per-task IP from Mesos. A separate ports/portMappings configuration is then disallowed.",
      "properties": {
        "discovery": {
          "type": "object",
          "description": "Information useful for service discovery.",
          "properties": {
            "ports": {
              "type": "array",
              "description": "Array of objects describing the ports exposed by each task.",
              "items": {
                "type": "object",
                "description": "Port",
                "properties": {
                  "number": {
                    "maximum": 65535,
                    "minimum": 0,
                    "type": "integer",
                    "description": "The port number."
                  },
                  "name": {
                    "type": "string",
                    "description": "Name of the port.",
                    "pattern": "^[a-z][a-z0-9-]*$"
                  },
                  "protocol": {
                    "enum": ["tcp", "udp"],
                    "description": "Protocol of the port (one of [&#39;tcp&#39;, &#39;udp&#39;])."
                  }
                }
              }
            }
          }
        },
        "groups": {
          "type": "array",
          "description": "Array of network groups. One IP address can belong to zero or more network groups. The idea is that containers can only reach containers with which they share at least one network group.",
          "items": {
            "type": "string",
            "description": "The name of the network group."
          }
        },
        "labels": {
          "type": "object",
          "description": "Key value pair for meta data on that network interface.",
          "properties": {},
          "additionalProperties": true
        }
      }
    },
    "ports": {
      "type": "array",
      "description": "An array of required port resources on the agent host. The number of items in the array determines how many dynamic ports are allocated for every task. For every port that is zero, a globally unique (cluster-wide) port is assigned and provided as part of the app definition to be used in load balancing definitions.",
      "items": {
        "maximum": 65535,
        "minimum": 0,
        "type": "integer"
      }
    },
    "portDefinitions": {
      "type": "array",
      "description": "An array of required port resources on the agent host. The number of items in the array determines how many dynamic ports are allocated for every task. For every port definition with port number zero, a globally unique (cluster-wide) service port is assigned and provided as part of the app definition to be used in load balancing definitions.",
      "items": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "port": {
            "type": "integer",
            "description": "if requirePorts is set to true, then this port number will be used on the agent host Otherwise if the requirePorts is set to false and this port number is not zero, then it will be used as a service port and a dynamic port will be used on the agent host. If it is set to zero, a dynamic port will be used on the host and a unique service port will be assigned by Marathon.",
            "maximum": 65535,
            "minimum": 0
          },
          "labels": {
            "type": "object",
            "description": "This can be used to add metadata to be interpreted by external applications such as firewalls.",
            "additionalProperties": {
              "type": "string"
            }
          },
          "name": {
            "type": "string",
            "description": "Name of the service hosted on this port. If provided, it must be unique over all port definitions."
          },
          "protocol": {
            "type": "string",
            "enum": ["tcp", "udp"],
            "description": "Protocol of the port (one of [&#39;tcp&#39;, &#39;udp&#39;]). Defaults to &#39;tcp&#39;."
          }
        }
      }
    },
    "residency": {
      "type": "object",
      "description": "When using local persistent volumes that pin tasks onto agents, these values define how Marathon handles terminal states of these tasks.",
      "properties": {
        "relaunchEscalationTimeoutSeconds": {
          "type": "integer",
          "description": "When a task using persistent local volumes cannot be restarted on the agent it&#39;s been pinned to, Marathon will try to launch this task on another node after this timeout. Defaults to 3600 (one hour).",
          "minimum": 0,
          "additionalProperties": false
        },
        "taskLostBehavior": {
          "type": "string",
          "description": "When Marathon receives a TASK_LOST status update indicating that the agent running the task is gone, this property defines whether Marathon will launch the task on another node or not. Defaults to WAIT_FOREVER",
          "enum": ["WAIT_FOREVER", "RELAUNCH_AFTER_TIMEOUT"],
          "additionalProperties": false
        }
      },
      "additionalProperties": false
    },
    "requirePorts": {
      "type": "boolean",
      "description": "Normally, the host ports of your tasks are automatically assigned. This corresponds to the requirePorts value false which is the default. If you need more control and want to specify your host ports in advance, you can set requirePorts to true. This way the ports you have specified are used as host ports. That also means that Marathon can schedule the associated tasks only on hosts that have the specified ports available."
    },
    "storeUrls": {
      "type": "array",
      "description": "URL&#39;s that have to be resolved and put into the artifact store, before the task will be started.",
      "items": {
        "type": "string",
        "minLength": 1
      }
    },
    "upgradeStrategy": {
      "type": "object",
      "description": "During an upgrade all instances of an application get replaced by a new version. The upgradeStrategy controls how Marathon stops old versions and launches new versions.",
      "additionalProperties": false,
      "properties": {
        "maximumOverCapacity": {
          "type": "number",
          "description": "A number between 0 and 1 which is multiplied with the instance count. This is the maximum number of additional instances launched at any point of time during the upgrade process.",
          "maximum": 1.0,
          "minimum": 0.0
        },
        "minimumHealthCapacity": {
          "type": "number",
          "description": "A number between 0 and 1 that is multiplied with the instance count. This is the minimum number of healthy nodes that do not sacrifice overall application purpose. Marathon will make sure, during the upgrade process, that at any point of time this number of healthy instances are up.",
          "maximum": 1.0,
          "minimum": 0.0
        }
      }
    },
    "uris": {
      "type": "array",
      "description": "URIs defined here are resolved, before the application gets started. If the application has external dependencies, they should be defined here.",
      "items": {
        "type": "string",
        "minLength": 1
      }
    },
    "user": {
      "type": "string",
      "description": "The user to use to run the tasks on the agent."
    },
    "version": {
      "type": "string",
      "description": "The version of this definition.",
      "format": "date-time"
    },
    "versionInfo": {
      "type": "object",
      "description": "Detailed version information.",
      "additionalProperties": false,
      "properties": {
        "lastScalingAt": {
          "type": "string",
          "description": "Contains the time stamp of the last change to this app which was not simply a scaling or a restarting configuration.",
          "format": "date-time"
        },
        "lastConfigChangeAt": {
          "type": "string",
          "description": "Contains the time stamp of the last change including changes like scaling or restarting the app. Since our versions are time based, this is currently equal to version.",
          "format": "date-time"
        }
      }
    }
  },
  "required": [
    "id"
  ],
  "type": "object"
}
</code></pre><p><strong>Example</strong>:</p><pre><code>{
  "id": "/foo",
  "instances": 2,
  "cmd": "sleep 1000",
  "cpus": 0.1,
  "disk": 0,
  "mem": 16,
  "acceptedResourceRoles": [
    "mesos_role"
  ],
  "args": [
    "sleep",
    "100"
  ],
  "backoffFactor": 1.15,
  "backoffSeconds": 1,
  "constraints": [
    [
      "hostname",
      "LIKE",
      "srv2.*"
    ]
  ],
  "container": {
    "docker": {
      "forcePullImage": false,
      "image": "mesosphere:marathon/latest",
      "network": "BRIDGE",
      "parameters": [
        {
          "key": "name",
          "value": "kdc"
        }
      ],
      "portMappings": [
        {
          "containerPort": 80,
          "hostPort": 0,
          "protocol": "tcp",
          "servicePort": 10019,
          "name": "http",
          "labels": { "vip": "192.168.0.1:80" }
        }
      ],
      "privileged": false
    },
    "type": "DOCKER",
    "volumes": [
      {
        "containerPath": "/docker_storage",
        "hostPath": "/hdd/tools/docker/registry",
        "mode": "RW"
      }
    ]
  },
  "dependencies": [
    "/prod/group"
  ],
  "env": {
    "XPS1": "Test",
    "XPS2": "Rest"
  },
  "executor": "",
  "healthChecks": [
    {
      "gracePeriodSeconds": 300,
      "ignoreHttp1xx": false,
      "intervalSeconds": 20,
      "maxConsecutiveFailures": 3,
      "path": "/",
      "portIndex": 0,
      "protocol": "HTTP",
      "timeoutSeconds": 20
    }
  ],
  "labels": {
    "owner": "zeus",
    "note": "Away from olympus"
  },
  "maxLaunchDelaySeconds": 3600,
  "ipAddress": {
    "discovery": {
      "ports": [
        {
          "number": 8080,
          "name": "rest_endpoint",
          "protocol": "tcp"
        }
      ]
    },
    "groups": [
      "dev"
    ],
    "labels": {
      "environment": "dev"
    }
  },
  "ports": [
    0
  ],
  "portDefinitions": [
    {
      "port": 0
      "protocol": "tcp",
      "name": "http",
      "labels": { "vip": "192.168.0.1:80" }
    }
  ],
  "requirePorts": false,
  "upgradeStrategy": {
    "maximumOverCapacity": 1,
    "minimumHealthCapacity": 1
  },
  "fetch": [
    { "uri": "https://foo.com/setup.py" },
    { "uri": "https://foo.com/archive.zip", "executable": false, "extract": true, "cache": true }
  ],
  "user": "root"
}
</code></pre></div><div class="tab-pane" id="v2_apps_post_response"><h2>HTTP status code <a href="http://httpstatus.es/201" target="_blank">201</a></h2><p>The application has been created and a deployment is started.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{
  "id": "/foo",
  "instances": 2,
  "cmd": "sleep 1000",
  "cpus": 0.1,
  "disk": 0,
  "mem": 16,
  "acceptedResourceRoles": [
    "mesos_role"
  ],
  "args": [
    "sleep",
    "100"
  ],
  "backoffFactor": 1.15,
  "backoffSeconds": 1,
  "constraints": [
    [
      "hostname",
      "LIKE",
      "srv2.*"
    ]
  ],
  "container": {
    "docker": {
      "forcePullImage": false,
      "image": "mesosphere:marathon/latest",
      "network": "BRIDGE",
      "parameters": [
        {
          "key": "name",
          "value": "kdc"
        }
      ],
      "portMappings": [
        {
          "containerPort": 80,
          "hostPort": 0,
          "protocol": "tcp",
          "servicePort": 10019,
          "name": "http",
          "labels": { "vip": "192.168.0.1:80" }
        }
      ],
      "privileged": false
    },
    "type": "DOCKER",
    "volumes": [
      {
        "containerPath": "/docker_storage",
        "hostPath": "/hdd/tools/docker/registry",
        "mode": "RW"
      }
    ]
  },
  "dependencies": [
    "/prod/group"
  ],
  "env": {
    "XPS1": "Test",
    "XPS2": "Rest"
  },
  "executor": "",
  "healthChecks": [
    {
      "gracePeriodSeconds": 300,
      "ignoreHttp1xx": false,
      "intervalSeconds": 20,
      "maxConsecutiveFailures": 3,
      "path": "/",
      "portIndex": 0,
      "protocol": "HTTP",
      "timeoutSeconds": 20
    }
  ],
  "labels": {
    "owner": "zeus",
    "note": "Away from olympus"
  },
  "maxLaunchDelaySeconds": 3600,
  "ipAddress": {
    "discovery": {
      "ports": [
        {
          "number": 8080,
          "name": "rest_endpoint",
          "protocol": "tcp"
        }
      ]
    },
    "groups": [
      "dev"
    ],
    "labels": {
      "environment": "dev"
    }
  },
  "ports": [
    0
  ],
  "portDefinitions": [
    {
      "port": 0
      "protocol": "tcp",
      "name": "http",
      "labels": { "vip": "192.168.0.1:80" }
    }
  ],
  "requirePorts": false,
  "upgradeStrategy": {
    "maximumOverCapacity": 1,
    "minimumHealthCapacity": 1
  },
  "fetch": [
    { "uri": "https://foo.com/setup.py" },
    { "uri": "https://foo.com/archive.zip", "executable": false, "extract": true, "cache": true }
  ],
  "user": "root"
}
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/400" target="_blank">400</a></h2><p>The application definition provided in the body is not valid.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{"message":"Invalid JSON","details":[{"path":"/id","errors":["error.expected.jsstring"]}]}
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/401" target="_blank">401</a></h2><p>Unauthorized. Authentication is enabled and you did not provide enough or wrong information to authenticate that request.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{ "message": "Invalid username or password." }
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/403" target="_blank">403</a></h2><p>Forbidden. Authorization is granted but the identity provided does not have sufficient access rights to do that action.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{ "message": "Not Authorized to perform this action!" }
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/409" target="_blank">409</a></h2><p>There is an already deployed application with this name</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{"message":"An app with id [/existing_app] already exists."}
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/422" target="_blank">422</a></h2><p>The entity send can not be preocessed, since there are validation errors</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{
  "message": "Object is not valid",
  "details": [
    {
      "path": "/upgradeStrategy/minimumHealthCapacity",
      "errors": [
        "is greater than 1"
      ]
    }
  ]
}
</code></pre></div></div></div></div></div></div></div><div class="panel panel-white"><div class="panel-heading"><h4 class="panel-title"><a class="collapsed" data-toggle="collapse" href="#panel_v2_apps__app_id_"><span class="parent">/v2/apps</span>/{app_id}</a> <span class="methods"><a href="#v2_apps__app_id__get"><span class="badge badge_get">get</span></a> <a href="#v2_apps__app_id__put"><span class="badge badge_put">put</span></a> <a href="#v2_apps__app_id__delete"><span class="badge badge_delete">delete</span></a></span></h4></div><div id="panel_v2_apps__app_id_" class="panel-collapse collapse"><div class="panel-body"><div class="list-group"><div onclick="window.location.href = '#v2_apps__app_id__get'" class="list-group-item"><span class="badge badge_get">get</span><div class="method_description"><p>Get the application with id <code>app_id</code>. The response includes some status information besides the current configuration of the app. You can specify optional embed arguments, to get more embedded information.</p></div><div class="clearfix"></div></div><div onclick="window.location.href = '#v2_apps__app_id__put'" class="list-group-item"><span class="badge badge_put">put</span><div class="method_description"><p>Replaces parameters of a running application. If no application with the given id exists, it will be created. If there is an application with this id, all running instances get upgraded to the new definition.</p><p>Note&#58; This operation will create a deployment. The operation finishes, if the deployment succeeds. You can query the deployments endoint to see the status of the deployment.</p></div><div class="clearfix"></div></div><div onclick="window.location.href = '#v2_apps__app_id__delete'" class="list-group-item"><span class="badge badge_delete">delete</span><div class="method_description"><p>Destroy an application. All data about that application will be deleted. Note&#58; This operation will create a deployment. The operation finishes, if the deployment succeeds. You can query the deployments endoint to see the status of the deployment.</p></div><div class="clearfix"></div></div></div></div></div><div class="modal fade" tabindex="0" id="v2_apps__app_id__get"><div class="modal-dialog"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button><h4 class="modal-title" id="myModalLabel"><span class="badge badge_get">get</span> <span class="parent">/v2/apps</span>/{app_id}</h4></div><div class="modal-body"><div class="alert alert-info"><p>Get the application with id <code>app_id</code>. The response includes some status information besides the current configuration of the app. You can specify optional embed arguments, to get more embedded information.</p></div><ul class="nav nav-tabs"><li class="active"><a href="#v2_apps__app_id__get_request" data-toggle="tab">Request</a></li><li><a href="#v2_apps__app_id__get_response" data-toggle="tab">Response</a></li></ul><div class="tab-content"><div class="tab-pane active" id="v2_apps__app_id__get_request"><h3>URI Parameters</h3><ul><li><strong>app_id</strong>: <em>required (string)</em></li></ul><h3>Query Parameters</h3><ul><li><strong>embed</strong>: <em>(one of app.tasks, app.count, app.deployments, app.lastTaskFailure, app.failures, app.taskStats - repeat: true)</em><p>Embeds nested resources that match the supplied path. You can specify this parameter multiple times with different values.<br></p><ul><li><code>app.tasks</code>. embed tasks Note&#58; if this embed is definded, it automatically sets <code>apps.deployments</code> but this will change in a future release. Please define all embeds explicitly.</li><li><code>app.counts</code>. embed all task counts (tasksStaged, tasksRunning, tasksHealthy, tasksUnhealthy)<br>Note&#58; currently embedded by default but this will change in a future release. Please define all embeds explicitly.</li><li><code>app.deployments</code>. embed all deployment identifier, if the related app currently is in deployment.</li><li><code>app.lastTaskFailure</code> embeds the lastTaskFailure for the application if there is one.</li><li><code>app.failures</code> Shorthand for apps.lastTaskFailure, apps.tasks, apps.counts and apps.deployments.<br>Note&#58; deprecated and will be removed in future versions Please define all embeds explicitly.</li><li><code>app.taskStats</code> exposes task statatistics in the JSON.</li></ul><p><strong>Example</strong>:</p><pre>embed=app.deployments&amp;embed=app.lastTaskFailure</pre></li></ul></div><div class="tab-pane" id="v2_apps__app_id__get_response"><h2>HTTP status code <a href="http://httpstatus.es/200" target="_blank">200</a></h2><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{
  "apps": [
    {
      "id": "/myapp",
      "cmd": "env &amp;&amp; sleep 60",
      "args": null,
      "user": null,
      "env": {
        "LD_LIBRARY_PATH": "/usr/local/lib/myLib"
      },
      "instances": 3,
      "cpus": 0.1,
      "mem": 5,
      "disk": 0,
      "executor": "",
      "constraints": [
        [
          "hostname",
          "UNIQUE",
          ""
        ]
      ],
      "uris": [
        "https://raw.github.com/mesosphere/marathon/master/README.md"
      ],
      "storeUrls": [],
      "ports": [
        10013,
        10015
      ],
      "requirePorts": false,
      "backoffSeconds": 1,
      "backoffFactor": 1.15,
      "maxLaunchDelaySeconds": 3600,
      "container": null,
      "healthChecks": [],
      "dependencies": [],
      "upgradeStrategy": {
        "minimumHealthCapacity": 1,
        "maximumOverCapacity": 1
      },
      "labels": {},
      "acceptedResourceRoles": null,
      "version": "2015-09-25T15:13:48.343Z",
      "versionInfo": {
        "lastScalingAt": "2015-09-25T15:13:48.343Z",
        "lastConfigChangeAt": "2015-09-25T15:13:48.343Z"
      },
      "tasksStaged": 0,
      "tasksRunning": 0,
      "tasksHealthy": 0,
      "tasksUnhealthy": 0,
      "deployments": [
        {
          "id": "9538079c-3898-4e32-aa31-799bf9097f74"
        }
      ]
    }
  ]
}
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/401" target="_blank">401</a></h2><p>Unauthorized. Authentication is enabled and you did not provide enough or wrong information to authenticate that request.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{ "message": "Invalid username or password." }
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/403" target="_blank">403</a></h2><p>Forbidden. Authorization is granted but the identity provided does not have sufficient access rights to do that action.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{ "message": "Not Authorized to perform this action!" }
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/404" target="_blank">404</a></h2><p>No task found with this <code>app_id</code>.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{ "message": "App &#39;/not_existent&#39; does not exist" }
</code></pre></div></div></div></div></div></div><div class="modal fade" tabindex="0" id="v2_apps__app_id__put"><div class="modal-dialog"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button><h4 class="modal-title" id="myModalLabel"><span class="badge badge_put">put</span> <span class="parent">/v2/apps</span>/{app_id}</h4></div><div class="modal-body"><div class="alert alert-info"><p>Replaces parameters of a running application. If no application with the given id exists, it will be created. If there is an application with this id, all running instances get upgraded to the new definition.</p><p>Note&#58; This operation will create a deployment. The operation finishes, if the deployment succeeds. You can query the deployments endoint to see the status of the deployment.</p></div><ul class="nav nav-tabs"><li class="active"><a href="#v2_apps__app_id__put_request" data-toggle="tab">Request</a></li><li><a href="#v2_apps__app_id__put_response" data-toggle="tab">Response</a></li></ul><div class="tab-content"><div class="tab-pane active" id="v2_apps__app_id__put_request"><h3>URI Parameters</h3><ul><li><strong>app_id</strong>: <em>required (string)</em></li></ul><h3>Query Parameters</h3><ul><li><strong>force</strong>: <em>(boolean)</em><p>Only one deployment can be applied to one application at the same time. If the existing deployment should be canceled by this change, you can set force=true. Caution&#58; setting force=true will cancel the current deployment. This paramter should be used only, if the current deployment is unsuccessful!</p></li></ul><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Schema</strong>:</p><pre><code>{
  "$schema": "http://json-schema.org/schema#",
  "additionalProperties": false,
  "definitions": {
    "pathType": {
      "type": "string",
      "pattern": "^(\\/?((\\.{2})|([a-z0-9][a-z0-9\\-.]*[a-z0-9]+)|([a-z0-9]*))($|\\/))+$",
      "minLength": 1
    }
  },
  "not": {
    "allOf": [
      {
        "required": [
          "cmd"
        ]
      },
      {
        "required": [
          "args"
        ]
      }
    ]
  },
  "properties": {
    "acceptedResourceRoles": {
      "items": {
        "type": "string"
      },
      "type": "array",
      "description": "Optional. A list of resource roles. Marathon considers only resource offers with roles in this list for launching tasks of this app. If you do not specify this, Marathon considers all resource offers with roles that have been configured by the `--default_accepted_resource_roles` command line flag. If no `--default_accepted_resource_roles` was given on startup, Marathon considers all resource offers. To register Marathon for a role, you need to specify the `--mesos_role` command line flag on startup. If you want to assign all resources of a slave to a role, you can use the `--default_role` argument when starting up the slave. If you need a more fine-grained configuration, you can use the `--resources` argument to specify resource shares per role. The Mesos master needs to be started with `--roles` followed by a comma-separated list of all roles you want to use across your cluster. See [the Mesos command line documentation](http://mesos.apache.org/documentation/latest/configuration/) for details."
    },
    "args": {
      "items": {
        "type": "string"
      },
      "type": "array",
      "description": "An array of strings that represents an alternative mode of specifying the command to run. This was motivated by safe usage of containerizer features like a custom Docker ENTRYPOINT. This args field may be used in place of cmd even when using the default command executor. This change mirrors API and semantics changes in the Mesos CommandInfo protobuf message starting with version `0.20.0`.  Either `cmd` or `args` must be supplied. It is invalid to supply both `cmd` and `args` in the same app."
    },
    "backoffFactor": {
      "minimum": 1.0,
      "type": "number",
      "description": "Configures exponential backoff behavior when launching potentially sick apps. This prevents sandboxes associated with consecutively failing tasks from filling up the hard disk on Mesos slaves. The backoff period is multiplied by the factor for each consecutive failure until it reaches maxLaunchDelaySeconds. This applies also to tasks that are killed due to failing too many health checks."
    },
    "backoffSeconds": {
      "description": "Configures exponential backoff behavior when launching potentially sick apps. This prevents sandboxes associated with consecutively failing tasks from filling up the hard disk on Mesos slaves. The backoff period is multiplied by the factor for each consecutive failure until it reaches maxLaunchDelaySeconds. This applies also to tasks that are killed due to failing too many health checks.",
      "minimum": 0,
      "type": "integer"
    },
    "cmd": {
      "description": "The command that is executed.  This value is wrapped by Mesos via `/bin/sh -c ${app.cmd}`.  Either `cmd` or `args` must be supplied. It is invalid to supply both `cmd` and `args` in the same app.",
      "type": "string",
      "minLength": 1
    },
    "constraints": {
      "type": "array",
      "items": {
        "type": "array",
        "items": [
          {
            "type": "string"
          },
          {
            "type": "string",
            "enum": ["UNIQUE", "CLUSTER", "GROUP_BY", "LIKE", "UNLIKE"]
          },
          {
            "type": "string"
          }
        ],
        "minItems": 2,
        "additionalItems": false
      },
      "description": "Valid constraint operators are one of UNIQUE, CLUSTER, GROUP_BY, LIKE, UNLIKE."
    },
    "container": {
      "additionalProperties": false,
      "properties": {
        "docker": {
          "additionalProperties": false,
          "properties": {
            "forcePullImage": {
              "type": "boolean",
              "description": "The container will be pulled, regardless if it is already available on the local system."
            },
            "image": {
              "type": "string",
              "minLength": 1,
              "description": "The name of the docker image to use."
            },
            "network": {
              "type": "string",
              "description": "The networking mode, this container should operate in. One of BRIDGED|HOST|NONE",
              "enum": ["BRIDGE", "HOST", "NONE"]
            },
            "parameters": {
              "type": "array",
              "description": "Allowing arbitrary parameters to be passed to docker CLI. Note that anything passed to this field is not guaranteed to be supported moving forward, as we might move away from the docker CLI.",
              "items": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "key": {
                    "type": "string",
                    "minLength": 1,
                    "description": "Key of this parameter"
                  },
                  "value": {
                    "type": "string",
                    "description": "Value of this parameter"
                  }
                },
                "required": [ "key", "value" ]
              }
            },
            "portMappings": {
              "type": "array",
              "items": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "containerPort": {
                    "type": "integer",
                    "description": "Refers to the port the application listens to inside of the container. It is optional and now defaults to 0, in which case Marathon assigns the container port the same value as the assigned hostPort. This is especially useful for apps that advertise the port they are listening on to the outside world for P2P communication. Without containerPort: 0 they would erroneously advertise their private container port which is usually not the same as the externally visible host port.",
                    "maximum": 65535,
                    "minimum": 0
                  },
                  "hostPort": {
                    "type": "integer",
                    "description": "Retains the traditional meaning in Marathon, which is a random port from the range included in the Mesos resource offer. The resulting host ports for each task are exposed via the task details in the REST API and the Marathon web UI. hostPort is optional and defaults to 0.",
                    "maximum": 65535,
                    "minimum": 0
                  },
                  "labels": {
                    "type": "object",
                    "description": "This can be used to add metadata to be interpreted by external applications such as firewalls.",
                    "additionalProperties": {
                      "type": "string"
                    }
                  },
                  "name": {
                    "type": "string",
                    "description": "Name of the service hosted on this port. If provided, it must be unique over all port mappings."
                  },
                  "protocol": {
                    "type": "string",
                    "enum": ["tcp", "udp"],
                    "description": "Protocol of the port (one of [&#39;tcp&#39;, &#39;udp&#39;]). Defaults to &#39;tcp&#39;."
                  },
                  "servicePort": {
                    "type": "integer",
                    "description": "Is a helper port intended for doing service discovery using a well-known port per service. The assigned servicePort value is not used/interpreted by Marathon itself but supposed to used by load balancer infrastructure. See Service Discovery Load Balancing doc page. The servicePort parameter is optional and defaults to 0. Like hostPort, If the value is 0, a random port will be assigned. If a servicePort value is assigned by Marathon then Marathon guarantees that its value is unique across the cluster. The values for random service ports are in the range [local_port_min, local_port_max] where local_port_min and local_port_max are command line options with default values of 10000 and 20000, respectively.",
                    "maximum": 65535,
                    "minimum": 0
                  }
                }
              }
            },
            "privileged": {
              "type": "boolean",
              "description": "Run this docker image in privileged mode."
            }
          },
          "required": [
            "image"
          ],
          "type": "object"
        },
        "type": {
          "type": "string",
          "description": "Supported container types at the moment are DOCKER and MESOS.",
          "enum": ["MESOS", "DOCKER"]
        },
        "volumes": {
          "items": {
            "additionalProperties": false,
            "properties": {
              "containerPath": {
                "type": "string",
                "description": "The path of the volume in the container",
                "minLength": 1
              },
              "hostPath": {
                "type": "string",
                "description": "The path of the volume on the host",
                "minLength": 1
              },
              "persistent": {
                "additionalProperties": false,
                "properties": {
                  "size": {
                    "type": "integer",
                    "description": "The size of the persistent volume in MiB",
                    "minimum": 0
                  }
                },
                "type": "object"
              },
              "mode": {
                "type": "string",
                "description": "Possible values are RO for ReadOnly and RW for Read/Write",
                "enum": ["RO", "RW"]
              }
            },
            "type": "object"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "cpus": {
      "type": "number",
      "description": "The number of CPU shares this application needs per instance. This number does not have to be integer, but can be a fraction.",
      "minimum": 0
    },
    "dependencies": {
      "type": "array",
      "description": "A list of services upon which this application depends. An order is derived from the dependencies for performing start/stop and upgrade of the application. For example, an application /a relies on the services /b which itself relies on /c. To start all 3 applications, first /c is started than /b than /a.",
      "items": {
        "$ref": "#/definitions/pathType"
      }
    },
    "disk": {
      "type": "number",
      "description": "How much disk space is needed for this application. This number does not have to be an integer, but can be a fraction.",
      "minimum": 0
    },
    "env": {
      "patternProperties": {
        ".*": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "executor": {
      "type": "string",
      "description": "The executor to use to launch this application. Different executors are available. The simplest one (and the default if none is given) is //cmd, which takes the cmd and executes that on the shell level.",
      "pattern": "^(|\\/\\/cmd|\\/?[^\\/]+(\\/[^\\/]+)*)$"
    },
    "fetch": {
      "type": "array",
      "description": "Provided URIs are passed to Mesos fetcher module and resolved in runtime.",
      "items": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "uri": {
            "type": "string",
            "description": "URI to be fetched by Mesos fetcher module"
          },
          "executable": {
            "type": "boolean",
            "description": "Set fetched artifact as executable"
          },
          "extract": {
            "type": "boolean",
            "description": "Extract fetched artifact if supported by Mesos fetcher module"
          },
          "cache": {
            "type": "boolean",
            "description": "Cache fetched artifact if supported by Mesos fetcher module"
          }
        },
        "required": [ "uri" ]
      }
    },
    "healthChecks": {
      "items": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "command": {
            "type": "object",
            "items": {
              "additionalProperties": false,
              "properties": {
                "value": {
                  "type": "string",
                  "description": "The health check command to execute."
                }
              }
            }
          },
          "gracePeriodSeconds": {
            "type": "integer",
            "description": "Health check failures are ignored within this number of seconds of the task being started or until the task becomes healthy for the first time.",
            "minimum": 0
          },
          "ignoreHttp1xx": {
            "type": "boolean",
            "description": "Ignore HTTP 1xx responses."
          },
          "intervalSeconds": {
            "type": "integer",
            "description": "Number of seconds to wait between health checks.",
            "minimum": 0
          },
          "maxConsecutiveFailures": {
            "type": "integer",
            "description": "Number of consecutive health check failures after which the unhealthy task should be killed.",
            "minimum": 0
          },
          "path": {
            "type": "string",
            "description": "Path to endpoint exposed by the task that will provide health status. Example: /path/to/health. Note: only used if protocol == HTTP[S]."
          },
          "port": {
            "type": "integer",
            "description": "The specific port to connect to. In case of dynamic ports, see portIndex.",
            "maximum": 65535,
            "minimum": 0
          },
          "portIndex": {
            "type": "integer",
            "description": "Index in this app&#39;s ports array to be used for health requests. An index is used so the app can use random ports, like [0, 0, 0] for example, and tasks could be started with port environment variables like $PORT1.",
            "minimum": 0
          },
          "protocol": {
            "type": "string",
            "description": "Protocol of the requests to be performed. One of HTTP, HTTPS, TCP or COMMAND.",
            "enum": ["HTTP", "HTTPS", "TCP", "COMMAND"]
          },
          "timeoutSeconds": {
            "type": "integer",
            "description": "Number of seconds after which a health check is considered a failure regardless of the response.",
            "minimum": 0
          }
        }
      },
      "type": "array"
    },
    "id": {
      "$ref": "#/definitions/pathType",
      "description": "Unique identifier for the app consisting of a series of names separated by slashes. Each name must be at least 1 character and may only contain digits (`0-9`), dashes (`-`), dots (`.`), and lowercase letters (`a-z`). The name may not begin or end with a dash."
    },
    "instances": {
      "type": "integer",
      "description": "The number of instances of this application to start. Please note: this number can be changed any time as needed to scale the application.",
      "minimum": 0
    },
    "labels": {
      "type": "object",
      "description": "Attaching metadata to apps can be useful to expose additional information to other services, so we added the ability to place labels on apps (for example, you could label apps staging and production to mark services by their position in the pipeline).",
      "additionalProperties": {
        "type": "string"
      }
    },
    "maxLaunchDelaySeconds": {
      "type": "integer",
      "description": "Configures exponential backoff behavior when launching potentially sick apps. This prevents sandboxes associated with consecutively failing tasks from filling up the hard disk on Mesos slaves. The backoff period is multiplied by the factor for each consecutive failure until it reaches maxLaunchDelaySeconds. This applies also to tasks that are killed due to failing too many health checks.",
      "minimum": 0
    },
    "mem": {
      "type": "number",
      "description": "The amount of memory in MB that is needed for the application per instance.",
      "minimum": 0
    },
    "ipAddress": {
      "type": "object",
      "description": "If an application definition includes the &#39;ipAddress&#39; field, then Marathon will request a per-task IP from Mesos. A separate ports/portMappings configuration is then disallowed.",
      "properties": {
        "discovery": {
          "type": "object",
          "description": "Information useful for service discovery.",
          "properties": {
            "ports": {
              "type": "array",
              "description": "Array of objects describing the ports exposed by each task.",
              "items": {
                "type": "object",
                "description": "Port",
                "properties": {
                  "number": {
                    "maximum": 65535,
                    "minimum": 0,
                    "type": "integer",
                    "description": "The port number."
                  },
                  "name": {
                    "type": "string",
                    "description": "Name of the port.",
                    "pattern": "^[a-z][a-z0-9-]*$"
                  },
                  "protocol": {
                    "enum": ["tcp", "udp"],
                    "description": "Protocol of the port (one of [&#39;tcp&#39;, &#39;udp&#39;])."
                  }
                }
              }
            }
          }
        },
        "groups": {
          "type": "array",
          "description": "Array of network groups. One IP address can belong to zero or more network groups. The idea is that containers can only reach containers with which they share at least one network group.",
          "items": {
            "type": "string",
            "description": "The name of the network group."
          }
        },
        "labels": {
          "type": "object",
          "description": "Key value pair for meta data on that network interface.",
          "properties": {},
          "additionalProperties": true
        }
      }
    },
    "ports": {
      "type": "array",
      "description": "An array of required port resources on the agent host. The number of items in the array determines how many dynamic ports are allocated for every task. For every port that is zero, a globally unique (cluster-wide) port is assigned and provided as part of the app definition to be used in load balancing definitions.",
      "items": {
        "maximum": 65535,
        "minimum": 0,
        "type": "integer"
      }
    },
    "portDefinitions": {
      "type": "array",
      "description": "An array of required port resources on the agent host. The number of items in the array determines how many dynamic ports are allocated for every task. For every port definition with port number zero, a globally unique (cluster-wide) service port is assigned and provided as part of the app definition to be used in load balancing definitions.",
      "items": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "port": {
            "type": "integer",
            "description": "if requirePorts is set to true, then this port number will be used on the agent host Otherwise if the requirePorts is set to false and this port number is not zero, then it will be used as a service port and a dynamic port will be used on the agent host. If it is set to zero, a dynamic port will be used on the host and a unique service port will be assigned by Marathon.",
            "maximum": 65535,
            "minimum": 0
          },
          "labels": {
            "type": "object",
            "description": "This can be used to add metadata to be interpreted by external applications such as firewalls.",
            "additionalProperties": {
              "type": "string"
            }
          },
          "name": {
            "type": "string",
            "description": "Name of the service hosted on this port. If provided, it must be unique over all port definitions."
          },
          "protocol": {
            "type": "string",
            "enum": ["tcp", "udp"],
            "description": "Protocol of the port (one of [&#39;tcp&#39;, &#39;udp&#39;]). Defaults to &#39;tcp&#39;."
          }
        }
      }
    },
    "residency": {
      "type": "object",
      "description": "When using local persistent volumes that pin tasks onto agents, these values define how Marathon handles terminal states of these tasks.",
      "properties": {
        "relaunchEscalationTimeoutSeconds": {
          "type": "integer",
          "description": "When a task using persistent local volumes cannot be restarted on the agent it&#39;s been pinned to, Marathon will try to launch this task on another node after this timeout. Defaults to 3600 (one hour).",
          "minimum": 0,
          "additionalProperties": false
        },
        "taskLostBehavior": {
          "type": "string",
          "description": "When Marathon receives a TASK_LOST status update indicating that the agent running the task is gone, this property defines whether Marathon will launch the task on another node or not. Defaults to WAIT_FOREVER",
          "enum": ["WAIT_FOREVER", "RELAUNCH_AFTER_TIMEOUT"],
          "additionalProperties": false
        }
      },
      "additionalProperties": false
    },
    "requirePorts": {
      "type": "boolean",
      "description": "Normally, the host ports of your tasks are automatically assigned. This corresponds to the requirePorts value false which is the default. If you need more control and want to specify your host ports in advance, you can set requirePorts to true. This way the ports you have specified are used as host ports. That also means that Marathon can schedule the associated tasks only on hosts that have the specified ports available."
    },
    "storeUrls": {
      "type": "array",
      "description": "URL&#39;s that have to be resolved and put into the artifact store, before the task will be started.",
      "items": {
        "type": "string",
        "minLength": 1
      }
    },
    "upgradeStrategy": {
      "type": "object",
      "description": "During an upgrade all instances of an application get replaced by a new version. The upgradeStrategy controls how Marathon stops old versions and launches new versions.",
      "additionalProperties": false,
      "properties": {
        "maximumOverCapacity": {
          "type": "number",
          "description": "A number between 0 and 1 which is multiplied with the instance count. This is the maximum number of additional instances launched at any point of time during the upgrade process.",
          "maximum": 1.0,
          "minimum": 0.0
        },
        "minimumHealthCapacity": {
          "type": "number",
          "description": "A number between 0 and 1 that is multiplied with the instance count. This is the minimum number of healthy nodes that do not sacrifice overall application purpose. Marathon will make sure, during the upgrade process, that at any point of time this number of healthy instances are up.",
          "maximum": 1.0,
          "minimum": 0.0
        }
      }
    },
    "uris": {
      "type": "array",
      "description": "URIs defined here are resolved, before the application gets started. If the application has external dependencies, they should be defined here.",
      "items": {
        "type": "string",
        "minLength": 1
      }
    },
    "user": {
      "type": "string",
      "description": "The user to use to run the tasks on the agent."
    },
    "version": {
      "type": "string",
      "description": "The version of this definition.",
      "format": "date-time"
    },
    "versionInfo": {
      "type": "object",
      "description": "Detailed version information.",
      "additionalProperties": false,
      "properties": {
        "lastScalingAt": {
          "type": "string",
          "description": "Contains the time stamp of the last change to this app which was not simply a scaling or a restarting configuration.",
          "format": "date-time"
        },
        "lastConfigChangeAt": {
          "type": "string",
          "description": "Contains the time stamp of the last change including changes like scaling or restarting the app. Since our versions are time based, this is currently equal to version.",
          "format": "date-time"
        }
      }
    }
  },
  "required": [
    "id"
  ],
  "type": "object"
}
</code></pre><p><strong>Example</strong>:</p><pre><code>{
  "id": "/foo",
  "instances": 2,
  "cmd": "sleep 1000",
  "cpus": 0.1,
  "disk": 0,
  "mem": 16,
  "acceptedResourceRoles": [
    "mesos_role"
  ],
  "args": [
    "sleep",
    "100"
  ],
  "backoffFactor": 1.15,
  "backoffSeconds": 1,
  "constraints": [
    [
      "hostname",
      "LIKE",
      "srv2.*"
    ]
  ],
  "container": {
    "docker": {
      "forcePullImage": false,
      "image": "mesosphere:marathon/latest",
      "network": "BRIDGE",
      "parameters": [
        {
          "key": "name",
          "value": "kdc"
        }
      ],
      "portMappings": [
        {
          "containerPort": 80,
          "hostPort": 0,
          "protocol": "tcp",
          "servicePort": 10019,
          "name": "http",
          "labels": { "vip": "192.168.0.1:80" }
        }
      ],
      "privileged": false
    },
    "type": "DOCKER",
    "volumes": [
      {
        "containerPath": "/docker_storage",
        "hostPath": "/hdd/tools/docker/registry",
        "mode": "RW"
      }
    ]
  },
  "dependencies": [
    "/prod/group"
  ],
  "env": {
    "XPS1": "Test",
    "XPS2": "Rest"
  },
  "executor": "",
  "healthChecks": [
    {
      "gracePeriodSeconds": 300,
      "ignoreHttp1xx": false,
      "intervalSeconds": 20,
      "maxConsecutiveFailures": 3,
      "path": "/",
      "portIndex": 0,
      "protocol": "HTTP",
      "timeoutSeconds": 20
    }
  ],
  "labels": {
    "owner": "zeus",
    "note": "Away from olympus"
  },
  "maxLaunchDelaySeconds": 3600,
  "ipAddress": {
    "discovery": {
      "ports": [
        {
          "number": 8080,
          "name": "rest_endpoint",
          "protocol": "tcp"
        }
      ]
    },
    "groups": [
      "dev"
    ],
    "labels": {
      "environment": "dev"
    }
  },
  "ports": [
    0
  ],
  "portDefinitions": [
    {
      "port": 0
      "protocol": "tcp",
      "name": "http",
      "labels": { "vip": "192.168.0.1:80" }
    }
  ],
  "requirePorts": false,
  "upgradeStrategy": {
    "maximumOverCapacity": 1,
    "minimumHealthCapacity": 1
  },
  "fetch": [
    { "uri": "https://foo.com/setup.py" },
    { "uri": "https://foo.com/archive.zip", "executable": false, "extract": true, "cache": true }
  ],
  "user": "root"
}
</code></pre></div><div class="tab-pane" id="v2_apps__app_id__put_response"><h2>HTTP status code <a href="http://httpstatus.es/200" target="_blank">200</a></h2><p>A deployment is started which has a unique deployment identifier. The related deployment can be fetched from the /v2/deployments endpoint. If the deployement is gone from the list of deployments, than this means it is finished. As long as the deployment runs, the effect of that change operation is visible only partially.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{
  "deploymentId": "5ed4c0c5-9ff8-4a6f-a0cd-f57f59a34b43",
  "version": "2015-09-29T15:59:51.164Z"
}
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/400" target="_blank">400</a></h2><p>The application definition provided in the body is not valid.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{"message":"Invalid JSON","details":[{"path":"/id","errors":["error.expected.jsstring"]}]}
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/401" target="_blank">401</a></h2><p>Unauthorized. Authentication is enabled and you did not provide enough or wrong information to authenticate that request.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{ "message": "Invalid username or password." }
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/403" target="_blank">403</a></h2><p>Forbidden. Authorization is granted but the identity provided does not have sufficient access rights to do that action.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{ "message": "Not Authorized to perform this action!" }
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/404" target="_blank">404</a></h2><p>No task found with this <code>app_id</code>.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{ "message": "App &#39;/not_existent&#39; does not exist" }
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/409" target="_blank">409</a></h2><p>There is an already running deployment, that affects this application. To override this deployment, use the force=true flag</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{
 "message":"App is locked by one or more deployments. Override with the option &#39;?force=true&#39;. View details at &#39;/v2/deployments/&lt;DEPLOYMENT_ID&gt;&#39;.",
 "deployments":[{"id":"97c136bf-5a28-4821-9d94-480d9fbb01c8"}]
}
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/422" target="_blank">422</a></h2><p>The entity send can not be preocessed, since there are validation errors</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{
  "message": "Object is not valid",
  "details": [
    {
      "path": "/upgradeStrategy/minimumHealthCapacity",
      "errors": [
        "is greater than 1"
      ]
    }
  ]
}
</code></pre></div></div></div></div></div></div><div class="modal fade" tabindex="0" id="v2_apps__app_id__delete"><div class="modal-dialog"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button><h4 class="modal-title" id="myModalLabel"><span class="badge badge_delete">delete</span> <span class="parent">/v2/apps</span>/{app_id}</h4></div><div class="modal-body"><div class="alert alert-info"><p>Destroy an application. All data about that application will be deleted. Note&#58; This operation will create a deployment. The operation finishes, if the deployment succeeds. You can query the deployments endoint to see the status of the deployment.</p></div><ul class="nav nav-tabs"><li class="active"><a href="#v2_apps__app_id__delete_request" data-toggle="tab">Request</a></li><li><a href="#v2_apps__app_id__delete_response" data-toggle="tab">Response</a></li></ul><div class="tab-content"><div class="tab-pane active" id="v2_apps__app_id__delete_request"><h3>URI Parameters</h3><ul><li><strong>app_id</strong>: <em>required (string)</em></li></ul><h3>Query Parameters</h3><ul><li><strong>force</strong>: <em>(boolean)</em><p>Only one deployment can be applied to one application at the same time. If the existing deployment should be canceled by this change, you can set force=true. Caution&#58; setting force=true will cancel the current deployment. This paramter should be used only, if the current deployment is unsuccessful!</p></li></ul></div><div class="tab-pane" id="v2_apps__app_id__delete_response"><h2>HTTP status code <a href="http://httpstatus.es/200" target="_blank">200</a></h2><p>A deployment is started which has a unique deployment identifier. The related deployment can be fetched from the /v2/deployments endpoint. If the deployement is gone from the list of deployments, than this means it is finished. As long as the deployment runs, the effect of that change operation is visible only partially.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{
  "deploymentId": "5ed4c0c5-9ff8-4a6f-a0cd-f57f59a34b43",
  "version": "2015-09-29T15:59:51.164Z"
}
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/401" target="_blank">401</a></h2><p>Unauthorized. Authentication is enabled and you did not provide enough or wrong information to authenticate that request.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{ "message": "Invalid username or password." }
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/403" target="_blank">403</a></h2><p>Forbidden. Authorization is granted but the identity provided does not have sufficient access rights to do that action.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{ "message": "Not Authorized to perform this action!" }
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/404" target="_blank">404</a></h2><p>No app with this id known.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{"message":"App &#39;/not-existing&#39; does not exist"}
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/409" target="_blank">409</a></h2><p>There is an already running deployment, that affects this application. To override this deployment, use the force=true flag</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{
 "message":"App is locked by one or more deployments. Override with the option &#39;?force=true&#39;. View details at &#39;/v2/deployments/&lt;DEPLOYMENT_ID&gt;&#39;.",
 "deployments":[{"id":"97c136bf-5a28-4821-9d94-480d9fbb01c8"}]
}
</code></pre></div></div></div></div></div></div></div><div class="panel panel-white"><div class="panel-heading"><h4 class="panel-title"><a class="collapsed" data-toggle="collapse" href="#panel_v2_apps__app_id__restart"><span class="parent">/v2/apps/{app_id}</span>/restart</a> <span class="methods"><a href="#v2_apps__app_id__restart_post"><span class="badge badge_post">post</span></a></span></h4></div><div id="panel_v2_apps__app_id__restart" class="panel-collapse collapse"><div class="panel-body"><div class="list-group"><div onclick="window.location.href = '#v2_apps__app_id__restart_post'" class="list-group-item"><span class="badge badge_post">post</span><div class="method_description"><p>Restart all tasks of this application.</p></div><div class="clearfix"></div></div></div></div></div><div class="modal fade" tabindex="0" id="v2_apps__app_id__restart_post"><div class="modal-dialog"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button><h4 class="modal-title" id="myModalLabel"><span class="badge badge_post">post</span> <span class="parent">/v2/apps/{app_id}</span>/restart</h4></div><div class="modal-body"><div class="alert alert-info"><p>Restart all tasks of this application.</p></div><ul class="nav nav-tabs"><li class="active"><a href="#v2_apps__app_id__restart_post_request" data-toggle="tab">Request</a></li><li><a href="#v2_apps__app_id__restart_post_response" data-toggle="tab">Response</a></li></ul><div class="tab-content"><div class="tab-pane active" id="v2_apps__app_id__restart_post_request"><h3>URI Parameters</h3><ul><li><strong>app_id</strong>: <em>required (string)</em></li></ul><h3>Query Parameters</h3><ul><li><strong>force</strong>: <em>(boolean)</em><p>Only one deployment can be applied to one application at the same time. If the existing deployment should be canceled by this change, you can set force=true. Caution&#58; setting force=true will cancel the current deployment. This paramter should be used only, if the current deployment is unsuccessful!</p></li></ul></div><div class="tab-pane" id="v2_apps__app_id__restart_post_response"><h2>HTTP status code <a href="http://httpstatus.es/200" target="_blank">200</a></h2><p>A deployment is started which has a unique deployment identifier. The related deployment can be fetched from the /v2/deployments endpoint. If the deployement is gone from the list of deployments, than this means it is finished. As long as the deployment runs, the effect of that change operation is visible only partially.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{
  "deploymentId": "5ed4c0c5-9ff8-4a6f-a0cd-f57f59a34b43",
  "version": "2015-09-29T15:59:51.164Z"
}
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/401" target="_blank">401</a></h2><p>Unauthorized. Authentication is enabled and you did not provide enough or wrong information to authenticate that request.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{ "message": "Invalid username or password." }
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/403" target="_blank">403</a></h2><p>Forbidden. Authorization is granted but the identity provided does not have sufficient access rights to do that action.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{ "message": "Not Authorized to perform this action!" }
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/404" target="_blank">404</a></h2><p>No task found with this <code>app_id</code>.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{ "message": "App &#39;/not_existent&#39; does not exist" }
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/409" target="_blank">409</a></h2><p>There is an already running deployment, that affects this application. To override this deployment, use the force=true flag</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{
 "message":"App is locked by one or more deployments. Override with the option &#39;?force=true&#39;. View details at &#39;/v2/deployments/&lt;DEPLOYMENT_ID&gt;&#39;.",
 "deployments":[{"id":"97c136bf-5a28-4821-9d94-480d9fbb01c8"}]
}
</code></pre></div></div></div></div></div></div></div><div class="panel panel-white"><div class="panel-heading"><h4 class="panel-title"><a class="collapsed" data-toggle="collapse" href="#panel_v2_apps__app_id__tasks"><span class="parent">/v2/apps/{app_id}</span>/tasks</a> <span class="methods"><a href="#v2_apps__app_id__tasks_get"><span class="badge badge_get">get</span></a> <a href="#v2_apps__app_id__tasks_delete"><span class="badge badge_delete">delete</span></a></span></h4></div><div id="panel_v2_apps__app_id__tasks" class="panel-collapse collapse"><div class="panel-body"><div class="list-group"><div onclick="window.location.href = '#v2_apps__app_id__tasks_get'" class="list-group-item"><span class="badge badge_get">get</span><div class="method_description"><p>List all running tasks for application <code>app_id</code>.</p></div><div class="clearfix"></div></div><div onclick="window.location.href = '#v2_apps__app_id__tasks_delete'" class="list-group-item"><span class="badge badge_delete">delete</span><div class="method_description"><p>Kill tasks that belong to the application <code>app_id</code></p></div><div class="clearfix"></div></div></div></div></div><div class="modal fade" tabindex="0" id="v2_apps__app_id__tasks_get"><div class="modal-dialog"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button><h4 class="modal-title" id="myModalLabel"><span class="badge badge_get">get</span> <span class="parent">/v2/apps/{app_id}</span>/tasks</h4></div><div class="modal-body"><div class="alert alert-info"><p>List all running tasks for application <code>app_id</code>.</p></div><ul class="nav nav-tabs"><li class="active"><a href="#v2_apps__app_id__tasks_get_request" data-toggle="tab">Request</a></li><li><a href="#v2_apps__app_id__tasks_get_response" data-toggle="tab">Response</a></li></ul><div class="tab-content"><div class="tab-pane active" id="v2_apps__app_id__tasks_get_request"><h3>URI Parameters</h3><ul><li><strong>app_id</strong>: <em>required (string)</em></li></ul></div><div class="tab-pane" id="v2_apps__app_id__tasks_get_response"><h2>HTTP status code <a href="http://httpstatus.es/200" target="_blank">200</a></h2><p>The list of running tasks for application <code>app_id</code>.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{
  "tasks": [
    {
      "appId": "/minecraft/survival-world",
      "host": "srv7.hw.ca1.mesosphere.com",
      "id": "minecraft_survival-world.564bd685-4c30-11e5-98c1-be5b2935a987",
      "ports": [
        31756
      ],
      "slaveId": null,
      "stagedAt": "2015-08-26T20:23:39.463Z",
      "startedAt": "2015-08-26T20:23:44.678Z",
      "version": "2015-04-17T04:00:14.171Z"
    }
  ]
}</code></pre><p><strong>Type: text/plain</strong></p><p><strong>Example</strong>:</p><pre><code>minecraft_survival-world	10013	srv7.hw.ca1.mesosphere.com:31756
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/401" target="_blank">401</a></h2><p>Unauthorized. Authentication is enabled and you did not provide enough or wrong information to authenticate that request.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{ "message": "Invalid username or password." }
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/403" target="_blank">403</a></h2><p>Forbidden. Authorization is granted but the identity provided does not have sufficient access rights to do that action.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{ "message": "Not Authorized to perform this action!" }
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/404" target="_blank">404</a></h2><p>No task found with this <code>app_id</code>.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{ "message": "App &#39;/not_existent&#39; does not exist" }
</code></pre></div></div></div></div></div></div><div class="modal fade" tabindex="0" id="v2_apps__app_id__tasks_delete"><div class="modal-dialog"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button><h4 class="modal-title" id="myModalLabel"><span class="badge badge_delete">delete</span> <span class="parent">/v2/apps/{app_id}</span>/tasks</h4></div><div class="modal-body"><div class="alert alert-info"><p>Kill tasks that belong to the application <code>app_id</code></p></div><ul class="nav nav-tabs"><li class="active"><a href="#v2_apps__app_id__tasks_delete_request" data-toggle="tab">Request</a></li><li><a href="#v2_apps__app_id__tasks_delete_response" data-toggle="tab">Response</a></li></ul><div class="tab-content"><div class="tab-pane active" id="v2_apps__app_id__tasks_delete_request"><h3>URI Parameters</h3><ul><li><strong>app_id</strong>: <em>required (string)</em></li></ul><h3>Query Parameters</h3><ul><li><strong>force</strong>: <em>(boolean)</em><p>Only one deployment can be applied to one application at the same time. If the existing deployment should be canceled by this change, you can set force=true. Caution&#58; setting force=true will cancel the current deployment. This paramter should be used only, if the current deployment is unsuccessful!</p></li><li><strong>host</strong>: <em>(string)</em><p>all tasks of that application on the supplied slave are killed</p></li><li><strong>scale</strong>: <em>(boolean)</em><p>If <code>scale=true</code> is specified, then the application is scaled down by the number of killed tasks.</p></li></ul></div><div class="tab-pane" id="v2_apps__app_id__tasks_delete_response"><h2>HTTP status code <a href="http://httpstatus.es/200" target="_blank">200</a></h2><p>If scale=false, all tasks that were killed are returned. If scale=true, than a deployment is triggered and the deployment is returned.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{
  "tasks": [
    {
      "appId": "/minecraft/survival-world",
      "host": "srv7.hw.ca1.mesosphere.com",
      "id": "minecraft_survival-world.564bd685-4c30-11e5-98c1-be5b2935a987",
      "ports": [
        31756
      ],
      "slaveId": null,
      "stagedAt": "2015-08-26T20:23:39.463Z",
      "startedAt": "2015-08-26T20:23:44.678Z",
      "version": "2015-04-17T04:00:14.171Z"
    }
  ]
}</code></pre><h2>HTTP status code <a href="http://httpstatus.es/401" target="_blank">401</a></h2><p>Unauthorized. Authentication is enabled and you did not provide enough or wrong information to authenticate that request.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{ "message": "Invalid username or password." }
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/403" target="_blank">403</a></h2><p>Forbidden. Authorization is granted but the identity provided does not have sufficient access rights to do that action.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{ "message": "Not Authorized to perform this action!" }
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/404" target="_blank">404</a></h2><p>No task found with this <code>app_id</code>.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{ "message": "App &#39;/not_existent&#39; does not exist" }
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/409" target="_blank">409</a></h2><p>There is an already running deployment, that affects this application. To override this deployment, use the force=true flag</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{
 "message":"App is locked by one or more deployments. Override with the option &#39;?force=true&#39;. View details at &#39;/v2/deployments/&lt;DEPLOYMENT_ID&gt;&#39;.",
 "deployments":[{"id":"97c136bf-5a28-4821-9d94-480d9fbb01c8"}]
}
</code></pre></div></div></div></div></div></div></div><div class="panel panel-white"><div class="panel-heading"><h4 class="panel-title"><a class="collapsed" data-toggle="collapse" href="#panel_v2_apps__app_id__tasks__task_id_"><span class="parent">/v2/apps/{app_id}/tasks</span>/{task_id}</a> <span class="methods"><a href="#v2_apps__app_id__tasks__task_id__delete"><span class="badge badge_delete">delete</span></a></span></h4></div><div id="panel_v2_apps__app_id__tasks__task_id_" class="panel-collapse collapse"><div class="panel-body"><div class="list-group"><div onclick="window.location.href = '#v2_apps__app_id__tasks__task_id__delete'" class="list-group-item"><span class="badge badge_delete">delete</span><div class="method_description"><p>Kill the task with ID <code>task_id</code> that belongs to the application <code>app_id</code>.</p></div><div class="clearfix"></div></div></div></div></div><div class="modal fade" tabindex="0" id="v2_apps__app_id__tasks__task_id__delete"><div class="modal-dialog"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button><h4 class="modal-title" id="myModalLabel"><span class="badge badge_delete">delete</span> <span class="parent">/v2/apps/{app_id}/tasks</span>/{task_id}</h4></div><div class="modal-body"><div class="alert alert-info"><p>Kill the task with ID <code>task_id</code> that belongs to the application <code>app_id</code>.</p></div><ul class="nav nav-tabs"><li class="active"><a href="#v2_apps__app_id__tasks__task_id__delete_request" data-toggle="tab">Request</a></li><li><a href="#v2_apps__app_id__tasks__task_id__delete_response" data-toggle="tab">Response</a></li></ul><div class="tab-content"><div class="tab-pane active" id="v2_apps__app_id__tasks__task_id__delete_request"><h3>URI Parameters</h3><ul><li><strong>app_id</strong>: <em>required (string)</em></li><li><strong>task_id</strong>: <em>required (string)</em></li></ul><h3>Query Parameters</h3><ul><li><strong>force</strong>: <em>(boolean)</em><p>Only one deployment can be applied to one application at the same time. If the existing deployment should be canceled by this change, you can set force=true. Caution&#58; setting force=true will cancel the current deployment. This paramter should be used only, if the current deployment is unsuccessful!</p></li><li><strong>scale</strong>: <em>(boolean)</em><p>If <code>scale=true</code> is specified, then the application is scaled down by the number of killed tasks.</p></li></ul></div><div class="tab-pane" id="v2_apps__app_id__tasks__task_id__delete_response"><h2>HTTP status code <a href="http://httpstatus.es/200" target="_blank">200</a></h2><p>If scale=false, the task that was killed is returned. If scale=true, than a deployment is triggered and the deployment is returned.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{
  "task": [
    {
      "appId": "/minecraft/survival-world",
      "host": "srv7.hw.ca1.mesosphere.com",
      "id": "minecraft_survival-world.564bd685-4c30-11e5-98c1-be5b2935a987",
      "ports": [
        31756
      ],
      "slaveId": null,
      "stagedAt": "2015-08-26T20:23:39.463Z",
      "startedAt": "2015-08-26T20:23:44.678Z",
      "version": "2015-04-17T04:00:14.171Z"
    }
  ]
}</code></pre><h2>HTTP status code <a href="http://httpstatus.es/401" target="_blank">401</a></h2><p>Unauthorized. Authentication is enabled and you did not provide enough or wrong information to authenticate that request.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{ "message": "Invalid username or password." }
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/403" target="_blank">403</a></h2><p>Forbidden. Authorization is granted but the identity provided does not have sufficient access rights to do that action.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{ "message": "Not Authorized to perform this action!" }
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/404" target="_blank">404</a></h2><p>No task found with this task_id.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{"message":"Task &#39;not-existing&#39; does not exist"}
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/409" target="_blank">409</a></h2><p>There is an already running deployment, that affects this application. To override this deployment, use the force=true flag</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{
 "message":"App is locked by one or more deployments. Override with the option &#39;?force=true&#39;. View details at &#39;/v2/deployments/&lt;DEPLOYMENT_ID&gt;&#39;.",
 "deployments":[{"id":"97c136bf-5a28-4821-9d94-480d9fbb01c8"}]
}
</code></pre></div></div></div></div></div></div></div><div class="panel panel-white"><div class="panel-heading"><h4 class="panel-title"><a class="collapsed" data-toggle="collapse" href="#panel_v2_apps__app_id__versions"><span class="parent">/v2/apps/{app_id}</span>/versions</a> <span class="methods"><a href="#v2_apps__app_id__versions_get"><span class="badge badge_get">get</span></a></span></h4></div><div id="panel_v2_apps__app_id__versions" class="panel-collapse collapse"><div class="panel-body"><div class="list-group"><div onclick="window.location.href = '#v2_apps__app_id__versions_get'" class="list-group-item"><span class="badge badge_get">get</span><div class="method_description"><p>List the versions of the application with id <code>app_id</code></p></div><div class="clearfix"></div></div></div></div></div><div class="modal fade" tabindex="0" id="v2_apps__app_id__versions_get"><div class="modal-dialog"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button><h4 class="modal-title" id="myModalLabel"><span class="badge badge_get">get</span> <span class="parent">/v2/apps/{app_id}</span>/versions</h4></div><div class="modal-body"><div class="alert alert-info"><p>List the versions of the application with id <code>app_id</code></p></div><ul class="nav nav-tabs"><li class="active"><a href="#v2_apps__app_id__versions_get_request" data-toggle="tab">Request</a></li><li><a href="#v2_apps__app_id__versions_get_response" data-toggle="tab">Response</a></li></ul><div class="tab-content"><div class="tab-pane active" id="v2_apps__app_id__versions_get_request"><h3>URI Parameters</h3><ul><li><strong>app_id</strong>: <em>required (string)</em></li></ul></div><div class="tab-pane" id="v2_apps__app_id__versions_get_response"><h2>HTTP status code <a href="http://httpstatus.es/200" target="_blank">200</a></h2><p>The list of versions of the application</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{ "versions": [ "2014-03-01T23:42:20.938Z" ] }
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/401" target="_blank">401</a></h2><p>Unauthorized. Authentication is enabled and you did not provide enough or wrong information to authenticate that request.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{ "message": "Invalid username or password." }
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/403" target="_blank">403</a></h2><p>Forbidden. Authorization is granted but the identity provided does not have sufficient access rights to do that action.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{ "message": "Not Authorized to perform this action!" }
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/404" target="_blank">404</a></h2><p>No task found with this <code>app_id</code>.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{ "message": "App &#39;/not_existent&#39; does not exist" }
</code></pre></div></div></div></div></div></div></div><div class="panel panel-white"><div class="panel-heading"><h4 class="panel-title"><a class="collapsed" data-toggle="collapse" href="#panel_v2_apps__app_id__versions__version_"><span class="parent">/v2/apps/{app_id}/versions</span>/{version}</a> <span class="methods"><a href="#v2_apps__app_id__versions__version__get"><span class="badge badge_get">get</span></a></span></h4></div><div id="panel_v2_apps__app_id__versions__version_" class="panel-collapse collapse"><div class="panel-body"><div class="list-group"><div onclick="window.location.href = '#v2_apps__app_id__versions__version__get'" class="list-group-item"><span class="badge badge_get">get</span><div class="method_description"><p>List the configuration of the application with id <code>app_id</code> at version <code>version</code>.</p></div><div class="clearfix"></div></div></div></div></div><div class="modal fade" tabindex="0" id="v2_apps__app_id__versions__version__get"><div class="modal-dialog"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button><h4 class="modal-title" id="myModalLabel"><span class="badge badge_get">get</span> <span class="parent">/v2/apps/{app_id}/versions</span>/{version}</h4></div><div class="modal-body"><div class="alert alert-info"><p>List the configuration of the application with id <code>app_id</code> at version <code>version</code>.</p></div><ul class="nav nav-tabs"><li class="active"><a href="#v2_apps__app_id__versions__version__get_request" data-toggle="tab">Request</a></li><li><a href="#v2_apps__app_id__versions__version__get_response" data-toggle="tab">Response</a></li></ul><div class="tab-content"><div class="tab-pane active" id="v2_apps__app_id__versions__version__get_request"><h3>URI Parameters</h3><ul><li><strong>app_id</strong>: <em>required (string)</em></li><li><strong>version</strong>: <em>required (string)</em></li></ul></div><div class="tab-pane" id="v2_apps__app_id__versions__version__get_response"><h2>HTTP status code <a href="http://httpstatus.es/200" target="_blank">200</a></h2><p>The application definition at that point in time.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{
  "id": "/foo",
  "instances": 2,
  "cmd": "sleep 1000",
  "cpus": 0.1,
  "disk": 0,
  "mem": 16,
  "acceptedResourceRoles": [
    "mesos_role"
  ],
  "args": [
    "sleep",
    "100"
  ],
  "backoffFactor": 1.15,
  "backoffSeconds": 1,
  "constraints": [
    [
      "hostname",
      "LIKE",
      "srv2.*"
    ]
  ],
  "container": {
    "docker": {
      "forcePullImage": false,
      "image": "mesosphere:marathon/latest",
      "network": "BRIDGE",
      "parameters": [
        {
          "key": "name",
          "value": "kdc"
        }
      ],
      "portMappings": [
        {
          "containerPort": 80,
          "hostPort": 0,
          "protocol": "tcp",
          "servicePort": 10019,
          "name": "http",
          "labels": { "vip": "192.168.0.1:80" }
        }
      ],
      "privileged": false
    },
    "type": "DOCKER",
    "volumes": [
      {
        "containerPath": "/docker_storage",
        "hostPath": "/hdd/tools/docker/registry",
        "mode": "RW"
      }
    ]
  },
  "dependencies": [
    "/prod/group"
  ],
  "env": {
    "XPS1": "Test",
    "XPS2": "Rest"
  },
  "executor": "",
  "healthChecks": [
    {
      "gracePeriodSeconds": 300,
      "ignoreHttp1xx": false,
      "intervalSeconds": 20,
      "maxConsecutiveFailures": 3,
      "path": "/",
      "portIndex": 0,
      "protocol": "HTTP",
      "timeoutSeconds": 20
    }
  ],
  "labels": {
    "owner": "zeus",
    "note": "Away from olympus"
  },
  "maxLaunchDelaySeconds": 3600,
  "ipAddress": {
    "discovery": {
      "ports": [
        {
          "number": 8080,
          "name": "rest_endpoint",
          "protocol": "tcp"
        }
      ]
    },
    "groups": [
      "dev"
    ],
    "labels": {
      "environment": "dev"
    }
  },
  "ports": [
    0
  ],
  "portDefinitions": [
    {
      "port": 0
      "protocol": "tcp",
      "name": "http",
      "labels": { "vip": "192.168.0.1:80" }
    }
  ],
  "requirePorts": false,
  "upgradeStrategy": {
    "maximumOverCapacity": 1,
    "minimumHealthCapacity": 1
  },
  "fetch": [
    { "uri": "https://foo.com/setup.py" },
    { "uri": "https://foo.com/archive.zip", "executable": false, "extract": true, "cache": true }
  ],
  "user": "root"
}
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/401" target="_blank">401</a></h2><p>Unauthorized. Authentication is enabled and you did not provide enough or wrong information to authenticate that request.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{ "message": "Invalid username or password." }
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/403" target="_blank">403</a></h2><p>Forbidden. Authorization is granted but the identity provided does not have sufficient access rights to do that action.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{ "message": "Not Authorized to perform this action!" }
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/404" target="_blank">404</a></h2><p>No task found with this <code>app_id</code>.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{ "message": "App &#39;/not_existent&#39; does not exist" }
</code></pre></div></div></div></div></div></div></div></div></div></div><div class="panel panel-default"><div class="panel-heading"><h3 id="v2_deployments" class="panel-title">/v2/deployments</h3></div><div class="panel-body"><div class="panel-group"><div class="panel panel-white"><div class="panel-heading"><h4 class="panel-title"><a class="collapsed" data-toggle="collapse" href="#panel_v2_deployments"><span class="parent"></span>/v2/deployments</a> <span class="methods"><a href="#v2_deployments_get"><span class="badge badge_get">get</span></a></span></h4></div><div id="panel_v2_deployments" class="panel-collapse collapse"><div class="panel-body"><div class="list-group"><div onclick="window.location.href = '#v2_deployments_get'" class="list-group-item"><span class="badge badge_get">get</span><div class="method_description"><p>List all running deployments. A deployment is a change in the service setup. A deployment is identified by an id, affects a set of applications and is composed of deployment steps. Every step contains a list of actions with following types</p><ul><li><code>StartApplication</code> starts an application, which is currently not running.</li><li><code>StopApplication</code> stops an already running application.</li><li><code>ScaleApplication</code> changes the number of instances of an application and allows to kill specified instances while scaling.</li><li><code>RestartApplication</code> upgrades an already deployed application with a new version.</li><li><code>ResolveArtifacts</code> Resolve all artifacts of an application</li></ul></div><div class="clearfix"></div></div></div></div></div><div class="modal fade" tabindex="0" id="v2_deployments_get"><div class="modal-dialog"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button><h4 class="modal-title" id="myModalLabel"><span class="badge badge_get">get</span> <span class="parent"></span>/v2/deployments</h4></div><div class="modal-body"><div class="alert alert-info"><p>List all running deployments. A deployment is a change in the service setup. A deployment is identified by an id, affects a set of applications and is composed of deployment steps. Every step contains a list of actions with following types</p><ul><li><code>StartApplication</code> starts an application, which is currently not running.</li><li><code>StopApplication</code> stops an already running application.</li><li><code>ScaleApplication</code> changes the number of instances of an application and allows to kill specified instances while scaling.</li><li><code>RestartApplication</code> upgrades an already deployed application with a new version.</li><li><code>ResolveArtifacts</code> Resolve all artifacts of an application</li></ul></div><ul class="nav nav-tabs"><li class="active"><a href="#v2_deployments_get_response" data-toggle="tab">Response</a></li></ul><div class="tab-content"><div class="tab-pane active" id="v2_deployments_get_response"><h2>HTTP status code <a href="http://httpstatus.es/200" target="_blank">200</a></h2><p>The list of all running deployments.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>[
  {
    "id": "97c136bf-5a28-4821-9d94-480d9fbb01c8",
    "version": "2015-09-30T09:09:17.614Z",
    "affectedApps": [
      "/foo"
    ],
    "steps": [
      [
        {
          "action": "StartApplication",
          "app": "/foo"
        }
      ],
      [
        {
          "action": "ScaleApplication",
          "app": "/foo"
        }
      ]
    ],
    "currentActions": [
      {
        "action": "ScaleApplication",
        "app": "/foo"
      }
    ],
    "currentStep": 2,
    "totalSteps": 2
  }
]</code></pre><h2>HTTP status code <a href="http://httpstatus.es/401" target="_blank">401</a></h2><p>Unauthorized. Authentication is enabled and you did not provide enough or wrong information to authenticate that request.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{ "message": "Invalid username or password." }
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/403" target="_blank">403</a></h2><p>Forbidden. Authorization is granted but the identity provided does not have sufficient access rights to do that action.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{ "message": "Not Authorized to perform this action!" }
</code></pre></div></div></div></div></div></div></div><div class="panel panel-white"><div class="panel-heading"><h4 class="panel-title"><a class="collapsed" data-toggle="collapse" href="#panel_v2_deployments__deployment_id_"><span class="parent">/v2/deployments</span>/{deployment_id}</a> <span class="methods"><a href="#v2_deployments__deployment_id__delete"><span class="badge badge_delete">delete</span></a></span></h4></div><div id="panel_v2_deployments__deployment_id_" class="panel-collapse collapse"><div class="panel-body"><div class="list-group"><div onclick="window.location.href = '#v2_deployments__deployment_id__delete'" class="list-group-item"><span class="badge badge_delete">delete</span><div class="method_description"><p>Revert the deployment with <code>deployment_id</code> by creating a new deployment which reverses all changes.</p></div><div class="clearfix"></div></div></div></div></div><div class="modal fade" tabindex="0" id="v2_deployments__deployment_id__delete"><div class="modal-dialog"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button><h4 class="modal-title" id="myModalLabel"><span class="badge badge_delete">delete</span> <span class="parent">/v2/deployments</span>/{deployment_id}</h4></div><div class="modal-body"><div class="alert alert-info"><p>Revert the deployment with <code>deployment_id</code> by creating a new deployment which reverses all changes.</p></div><ul class="nav nav-tabs"><li class="active"><a href="#v2_deployments__deployment_id__delete_request" data-toggle="tab">Request</a></li><li><a href="#v2_deployments__deployment_id__delete_response" data-toggle="tab">Response</a></li></ul><div class="tab-content"><div class="tab-pane active" id="v2_deployments__deployment_id__delete_request"><h3>URI Parameters</h3><ul><li><strong>deployment_id</strong>: <em>required (string)</em></li></ul><h3>Query Parameters</h3><ul><li><strong>force</strong>: <em>(boolean)</em><p>If set to <code>false</code> (the default) then the deployment is canceled and a new deployment is created to revert the changes of this deployment. Without concurrent deployments, this restores the configuration before this deployment. If set to <code>true</code>, then the deployment is still canceled but no rollback deployment is created.</p></li></ul></div><div class="tab-pane" id="v2_deployments__deployment_id__delete_response"><h2>HTTP status code <a href="http://httpstatus.es/200" target="_blank">200</a></h2><p>A deployment is started which has a unique deployment identifier. The related deployment can be fetched from the /v2/deployments endpoint. If the deployement is gone from the list of deployments, than this means it is finished. As long as the deployment runs, the effect of that change operation is visible only partially.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{
  "deploymentId": "5ed4c0c5-9ff8-4a6f-a0cd-f57f59a34b43",
  "version": "2015-09-29T15:59:51.164Z"
}
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/202" target="_blank">202</a></h2><p>If the force flag is set to true, the deployment is canceled and no new deployment is triggered. In this case no body is returned.</p><h2>HTTP status code <a href="http://httpstatus.es/401" target="_blank">401</a></h2><p>Unauthorized. Authentication is enabled and you did not provide enough or wrong information to authenticate that request.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{ "message": "Invalid username or password." }
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/403" target="_blank">403</a></h2><p>Forbidden. Authorization is granted but the identity provided does not have sufficient access rights to do that action.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{ "message": "Not Authorized to perform this action!" }
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/404" target="_blank">404</a></h2><p>The deployment plan with the given id can not be found.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{ "message": "DeploymentPlan unknown_deployment does not exist" }
</code></pre></div></div></div></div></div></div></div></div></div></div><div class="panel panel-default"><div class="panel-heading"><h3 id="v2_groups" class="panel-title">/v2/groups</h3></div><div class="panel-body"><div class="panel-group"><div class="panel panel-white"><div class="panel-heading"><h4 class="panel-title"><a class="collapsed" data-toggle="collapse" href="#panel_v2_groups"><span class="parent"></span>/v2/groups</a> <span class="methods"><a href="#v2_groups_get"><span class="badge badge_get">get</span></a> <a href="#v2_groups_put"><span class="badge badge_put">put</span></a> <a href="#v2_groups_post"><span class="badge badge_post">post</span></a> <a href="#v2_groups_delete"><span class="badge badge_delete">delete</span></a></span></h4></div><div id="panel_v2_groups" class="panel-collapse collapse"><div class="panel-body"><div class="list-group"><div onclick="window.location.href = '#v2_groups_get'" class="list-group-item"><span class="badge badge_get">get</span><div class="method_description"><p>Get the group with all applications and all transitive child groups.</p></div><div class="clearfix"></div></div><div onclick="window.location.href = '#v2_groups_put'" class="list-group-item"><span class="badge badge_put">put</span><div class="method_description"><p>Change parameters of a deployed application group. The new group parameters get applied.</p><ul><li>Changes to application parameters will result in a restart of this application.</li><li>A new application added to the group will be started.</li><li>An existing application removed from the group will be stopped.</li></ul><p>If there are no changes to the application definition, no restart is triggered. During restart marathon keeps track, that the configured amount of minimal running instances are <em>always</em> available. This method allows 2 special modes for the update operation&gt;</p><ul><li>Provide only the <code>version</code> field in the group definition. This will rollback the group to that given version</li><li>Provide only the <code>scaleBy</code> field will scale all transitive applications instance counts by the given factor.</li></ul><p>When one of version or scaleBy are set, nothing else than a version change or transitive instance count scaling will be applied. If both version and scaleBy are set, only a version rollback will be performed – the scaleBy value will not be applied. A deployment can run forever. This is the case, when the new application has a problem and does not become healthy. In this case, human interaction is needed with 2 possible choices</p><ul><li>Rollback to an existing older version</li><li>Update with a newer version of the group which does not have the problems of the old one.</li></ul><p>Since the deployment of the group can take a considerable amount of time, this endpoint returns immediately with a version. The failure or success of the action is signalled via event. There is a group_change_success and group_change_failed with the given version.</p></div><div class="clearfix"></div></div><div onclick="window.location.href = '#v2_groups_post'" class="list-group-item"><span class="badge badge_post">post</span><div class="method_description"><p>Create and start a new application group. Application groups can contain other application groups.</p></div><div class="clearfix"></div></div><div onclick="window.location.href = '#v2_groups_delete'" class="list-group-item"><span class="badge badge_delete">delete</span><div class="method_description"><p>Destroy a group. All data about that group and all associated applications will be deleted. The failure or success of the action is signalled via events. There is a group_change_success and group_change_failed with the given version.</p></div><div class="clearfix"></div></div></div></div></div><div class="modal fade" tabindex="0" id="v2_groups_get"><div class="modal-dialog"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button><h4 class="modal-title" id="myModalLabel"><span class="badge badge_get">get</span> <span class="parent"></span>/v2/groups</h4></div><div class="modal-body"><div class="alert alert-info"><p>Get the group with all applications and all transitive child groups.</p></div><ul class="nav nav-tabs"><li class="active"><a href="#v2_groups_get_request" data-toggle="tab">Request</a></li><li><a href="#v2_groups_get_response" data-toggle="tab">Response</a></li></ul><div class="tab-content"><div class="tab-pane active" id="v2_groups_get_request"><h3>Query Parameters</h3><ul><li><strong>embed</strong>: <em>(one of group.groups, group.apps, group.apps.tasks, group.apps.count, group.apps.deployments, group.apps.lastTaskFailure, group.apps.failures, group.apps.taskStats - repeat: true)</em><p>Embeds nested resources that match the supplied path. You can specify this parameter multiple times with different values. Unknown embed parameters are ignored. If you omit this parameter, it defaults to <code>group.groups</code>, <code>group.apps</code></p><ul><li><code>group.groups</code> embed all child groups of each group<br></li><li><code>group.apps</code> embed all apps of each group<br></li><li><code>group.apps.tasks</code> embed all tasks of each application<br></li><li><code>group.apps.counts</code> embed all task counts (tasksStaged, tasksRunning, tasksHealthy, tasksUnhealthy)<br></li><li><code>group.apps.deployments</code> embed all deployment identifier, if the related app currently is in deployment.</li><li><code>group.apps.lastTaskFailure</code> embeds the lastTaskFailure for the application if there is one.</li><li><code>group.apps.taskStats</code> exposes task statistics in the JSON.</li></ul><p><strong>Example</strong>:</p><pre>group.apps</pre></li></ul></div><div class="tab-pane" id="v2_groups_get_response"><h2>HTTP status code <a href="http://httpstatus.es/200" target="_blank">200</a></h2><p>The group with all transitive dependencies.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Schema</strong>:</p><pre><code>{
  "$schema": "http://json-schema.org/schema#",
  "id": "https://raw.githubusercontent.com/mesosphere/marathon/master/docs/docs/rest-api/public/api/v2/schema/Group.json",
  "additionalProperties": false,
  "definitions": {
    "pathType": {
      "type": "string",
      "pattern": "^(\\/?((\\.{2})|([a-z0-9][a-z0-9\\-.]*[a-z0-9]+)|([a-z0-9]*))($|\\/))+$",
      "minLength": 1
    }
  },
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "$ref": "#/definitions/pathType",
      "description": "Unique identifier for the app consisting of a series of names separated by slashes. Each name must be at least 1 character and may only contain digits (`0-9`), dashes (`-`), dots (`.`), and lowercase letters (`a-z`). The name may not begin or end with a dash."
    },
    "apps": {
      "type": "array",
      "description": "The list of AppDefinitions in this group. See AppDefinition.json for the schema.",
      "items": {
        "$ref": "./AppDefinition.json"
      }
    },
    "groups": {
      "type": "array",
      "description": "Groups can build a tree. Each group can contain sub-groups. The sub-groups are defined here.",
      "items": {
        "$ref": "#"
      }
    },
    "dependencies": {
      "type": "array",
      "description": "A list of services upon which this application depends. An order is derived from the dependencies for performing start/stop and upgrade of the application. For example, an application /a relies on the services /b which itself relies on /c. To start all 3 applications, first /c is started than /b than /a.",
      "items": {
        "$ref": "#/definitions/pathType"
      }
    },
    "version": {
      "type": "string",
      "description": "The version of this definition.",
      "format": "date-time"
    }
  },
  "required": [
    "id"
  ]
}</code></pre><p><strong>Example</strong>:</p><pre><code>{
  "id": "/",
  "apps": [],
  "groups": [
    {
      "id": "/tools",
      "apps": [
        {
          "id": "/tools/oauth-server",
          "instances": 2,
          "cpus": 1,
          "mem": 1024,
          "disk": 0,
          "constraints": [
            [
              "hostname",
              "UNIQUE"
            ]
          ],
          "uris": [],
          "storeUrls": [],
          "ports": [
            1980
          ],
          "requirePorts": false,
          "backoffSeconds": 1,
          "backoffFactor": 1.15,
          "maxLaunchDelaySeconds": 3600,
          "container": {
            "type": "DOCKER",
            "volumes": [],
            "docker": {
              "image": "docker-registry/oauth_server:6d7d463cb8b1517002080a81cf23f9cf7b7fc774",
              "network": "HOST",
              "privileged": false,
              "parameters": [],
              "forcePullImage": false
            }
          },
          "healthChecks": [
            {
              "path": "/",
              "protocol": "HTTP",
              "portIndex": 0,
              "gracePeriodSeconds": 300,
              "intervalSeconds": 20,
              "timeoutSeconds": 20,
              "maxConsecutiveFailures": 3,
              "ignoreHttp1xx": false
            }
          ],
          "dependencies": [],
          "upgradeStrategy": {
            "minimumHealthCapacity": 0.5,
            "maximumOverCapacity": 0
          },
          "version": "2015-09-28T19:47:37.681Z",
          "versionInfo": {
            "lastScalingAt": "2015-09-28T19:47:37.681Z",
            "lastConfigChangeAt": "2015-09-28T19:47:37.681Z"
          }
        },
        {
          "id": "/tools/datadog-agent",
          "instances": 5,
          "cpus": 1,
          "mem": 512,
          "disk": 0,
          "executor": "",
          "constraints": [
            [
              "hostname",
              "UNIQUE"
            ]
          ],
          "uris": [],
          "storeUrls": [],
          "ports": [
            10018
          ],
          "requirePorts": false,
          "backoffSeconds": 1,
          "backoffFactor": 1.15,
          "maxLaunchDelaySeconds": 3600,
          "container": {
            "type": "DOCKER",
            "volumes": [
              {
                "containerPath": "/var/run/docker.sock",
                "hostPath": "/var/run/docker.sock",
                "mode": "RW"
              },
              {
                "containerPath": "/host/proc/mounts",
                "hostPath": "/proc/mounts",
                "mode": "RO"
              },
              {
                "containerPath": "/host/sys/fs/cgroup",
                "hostPath": "/sys/fs/cgroup/",
                "mode": "RO"
              }
            ],
            "docker": {
              "image": "datadog/docker-dd-agent:latest",
              "network": "HOST",
              "privileged": true,
              "parameters": [],
              "forcePullImage": false
            }
          },
          "healthChecks": [],
          "dependencies": [],
          "upgradeStrategy": {
            "minimumHealthCapacity": 0.5,
            "maximumOverCapacity": 0
          },
          "version": "2015-08-26T22:33:24.225Z",
          "versionInfo": {
            "lastScalingAt": "2015-08-26T22:33:24.225Z",
            "lastConfigChangeAt": "2015-05-19T13:59:18.899Z"
          }
        }
      ],
      "groups": [
        {
          "id": "/tools/log",
          "apps": [],
          "groups": [],
          "dependencies": [],
          "version": "2015-09-17T10:38:20.875Z"
        },
        {
          "id": "/tools/docker",
          "apps": [
            {
              "id": "/tools/docker/registry",
              "instances": 1,
              "cpus": 0.5,
              "mem": 4096,
              "disk": 0,
              "executor": "",
              "constraints": [],
              "uris": [],
              "storeUrls": [],
              "ports": [
                5000
              ],
              "requirePorts": false,
              "backoffSeconds": 1,
              "backoffFactor": 1.15,
              "maxLaunchDelaySeconds": 3600,
              "container": {
                "type": "DOCKER",
                "volumes": [
                  {
                    "containerPath": "/docker_storage",
                    "hostPath": "/hdd/tools/docker/registry",
                    "mode": "RW"
                  }
                ],
                "docker": {
                  "image": "registry",
                  "network": "BRIDGE",
                  "portMappings": [
                    {
                      "containerPort": 5000,
                      "hostPort": 0,
                      "servicePort": 5000,
                      "protocol": "tcp"
                    }
                  ],
                  "privileged": false,
                  "parameters": [],
                  "forcePullImage": false
                }
              },
              "healthChecks": [],
              "dependencies": [],
              "upgradeStrategy": {
                "minimumHealthCapacity": 1,
                "maximumOverCapacity": 1
              },
              "version": "2015-08-19T21:26:47.616Z",
              "versionInfo": {
                "lastScalingAt": "2015-08-19T21:26:47.616Z",
                "lastConfigChangeAt": "2015-08-19T21:00:54.621Z"
              }
            }
          ],
          "groups": [],
          "dependencies": [],
          "version": "2015-09-17T10:38:20.875Z"
        }
      ],
      "dependencies": [],
      "version": "2015-09-17T10:38:20.875Z"
    }
  ],
  "dependencies": [],
  "version": "2015-09-17T10:38:20.875Z"
}</code></pre><h2>HTTP status code <a href="http://httpstatus.es/401" target="_blank">401</a></h2><p>Unauthorized. Authentication is enabled and you did not provide enough or wrong information to authenticate that request.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{ "message": "Invalid username or password." }
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/403" target="_blank">403</a></h2><p>Forbidden. Authorization is granted but the identity provided does not have sufficient access rights to do that action.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{ "message": "Not Authorized to perform this action!" }
</code></pre></div></div></div></div></div></div><div class="modal fade" tabindex="0" id="v2_groups_put"><div class="modal-dialog"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button><h4 class="modal-title" id="myModalLabel"><span class="badge badge_put">put</span> <span class="parent"></span>/v2/groups</h4></div><div class="modal-body"><div class="alert alert-info"><p>Change parameters of a deployed application group. The new group parameters get applied.</p><ul><li>Changes to application parameters will result in a restart of this application.</li><li>A new application added to the group will be started.</li><li>An existing application removed from the group will be stopped.</li></ul><p>If there are no changes to the application definition, no restart is triggered. During restart marathon keeps track, that the configured amount of minimal running instances are <em>always</em> available. This method allows 2 special modes for the update operation&gt;</p><ul><li>Provide only the <code>version</code> field in the group definition. This will rollback the group to that given version</li><li>Provide only the <code>scaleBy</code> field will scale all transitive applications instance counts by the given factor.</li></ul><p>When one of version or scaleBy are set, nothing else than a version change or transitive instance count scaling will be applied. If both version and scaleBy are set, only a version rollback will be performed – the scaleBy value will not be applied. A deployment can run forever. This is the case, when the new application has a problem and does not become healthy. In this case, human interaction is needed with 2 possible choices</p><ul><li>Rollback to an existing older version</li><li>Update with a newer version of the group which does not have the problems of the old one.</li></ul><p>Since the deployment of the group can take a considerable amount of time, this endpoint returns immediately with a version. The failure or success of the action is signalled via event. There is a group_change_success and group_change_failed with the given version.</p></div><ul class="nav nav-tabs"><li class="active"><a href="#v2_groups_put_request" data-toggle="tab">Request</a></li><li><a href="#v2_groups_put_response" data-toggle="tab">Response</a></li></ul><div class="tab-content"><div class="tab-pane active" id="v2_groups_put_request"><h3>Query Parameters</h3><ul><li><strong>force</strong>: <em>(boolean)</em><p>Only one deployment can be applied to one application at the same time. If the existing deployment should be canceled by this change, you can set force=true. Caution&#58; setting force=true will cancel the current deployment. This paramter should be used only, if the current deployment is unsuccessful!</p></li></ul><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Schema</strong>:</p><pre><code>{
  "$schema": "http://json-schema.org/schema#",
  "id": "https://raw.githubusercontent.com/mesosphere/marathon/master/docs/docs/rest-api/public/api/v2/schema/Group.json",
  "additionalProperties": false,
  "definitions": {
    "pathType": {
      "type": "string",
      "pattern": "^(\\/?((\\.{2})|([a-z0-9][a-z0-9\\-.]*[a-z0-9]+)|([a-z0-9]*))($|\\/))+$",
      "minLength": 1
    }
  },
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "$ref": "#/definitions/pathType",
      "description": "Unique identifier for the app consisting of a series of names separated by slashes. Each name must be at least 1 character and may only contain digits (`0-9`), dashes (`-`), dots (`.`), and lowercase letters (`a-z`). The name may not begin or end with a dash."
    },
    "apps": {
      "type": "array",
      "description": "The list of AppDefinitions in this group. See AppDefinition.json for the schema.",
      "items": {
        "$ref": "./AppDefinition.json"
      }
    },
    "groups": {
      "type": "array",
      "description": "Groups can build a tree. Each group can contain sub-groups. The sub-groups are defined here.",
      "items": {
        "$ref": "#"
      }
    },
    "dependencies": {
      "type": "array",
      "description": "A list of services upon which this application depends. An order is derived from the dependencies for performing start/stop and upgrade of the application. For example, an application /a relies on the services /b which itself relies on /c. To start all 3 applications, first /c is started than /b than /a.",
      "items": {
        "$ref": "#/definitions/pathType"
      }
    },
    "version": {
      "type": "string",
      "description": "The version of this definition.",
      "format": "date-time"
    }
  },
  "required": [
    "id"
  ]
}</code></pre><p><strong>Example</strong>:</p><pre><code>{
  "id": "/",
  "apps": [],
  "groups": [
    {
      "id": "/tools",
      "apps": [
        {
          "id": "/tools/oauth-server",
          "instances": 2,
          "cpus": 1,
          "mem": 1024,
          "disk": 0,
          "constraints": [
            [
              "hostname",
              "UNIQUE"
            ]
          ],
          "uris": [],
          "storeUrls": [],
          "ports": [
            1980
          ],
          "requirePorts": false,
          "backoffSeconds": 1,
          "backoffFactor": 1.15,
          "maxLaunchDelaySeconds": 3600,
          "container": {
            "type": "DOCKER",
            "volumes": [],
            "docker": {
              "image": "docker-registry/oauth_server:6d7d463cb8b1517002080a81cf23f9cf7b7fc774",
              "network": "HOST",
              "privileged": false,
              "parameters": [],
              "forcePullImage": false
            }
          },
          "healthChecks": [
            {
              "path": "/",
              "protocol": "HTTP",
              "portIndex": 0,
              "gracePeriodSeconds": 300,
              "intervalSeconds": 20,
              "timeoutSeconds": 20,
              "maxConsecutiveFailures": 3,
              "ignoreHttp1xx": false
            }
          ],
          "dependencies": [],
          "upgradeStrategy": {
            "minimumHealthCapacity": 0.5,
            "maximumOverCapacity": 0
          },
          "version": "2015-09-28T19:47:37.681Z",
          "versionInfo": {
            "lastScalingAt": "2015-09-28T19:47:37.681Z",
            "lastConfigChangeAt": "2015-09-28T19:47:37.681Z"
          }
        },
        {
          "id": "/tools/datadog-agent",
          "instances": 5,
          "cpus": 1,
          "mem": 512,
          "disk": 0,
          "executor": "",
          "constraints": [
            [
              "hostname",
              "UNIQUE"
            ]
          ],
          "uris": [],
          "storeUrls": [],
          "ports": [
            10018
          ],
          "requirePorts": false,
          "backoffSeconds": 1,
          "backoffFactor": 1.15,
          "maxLaunchDelaySeconds": 3600,
          "container": {
            "type": "DOCKER",
            "volumes": [
              {
                "containerPath": "/var/run/docker.sock",
                "hostPath": "/var/run/docker.sock",
                "mode": "RW"
              },
              {
                "containerPath": "/host/proc/mounts",
                "hostPath": "/proc/mounts",
                "mode": "RO"
              },
              {
                "containerPath": "/host/sys/fs/cgroup",
                "hostPath": "/sys/fs/cgroup/",
                "mode": "RO"
              }
            ],
            "docker": {
              "image": "datadog/docker-dd-agent:latest",
              "network": "HOST",
              "privileged": true,
              "parameters": [],
              "forcePullImage": false
            }
          },
          "healthChecks": [],
          "dependencies": [],
          "upgradeStrategy": {
            "minimumHealthCapacity": 0.5,
            "maximumOverCapacity": 0
          },
          "version": "2015-08-26T22:33:24.225Z",
          "versionInfo": {
            "lastScalingAt": "2015-08-26T22:33:24.225Z",
            "lastConfigChangeAt": "2015-05-19T13:59:18.899Z"
          }
        }
      ],
      "groups": [
        {
          "id": "/tools/log",
          "apps": [],
          "groups": [],
          "dependencies": [],
          "version": "2015-09-17T10:38:20.875Z"
        },
        {
          "id": "/tools/docker",
          "apps": [
            {
              "id": "/tools/docker/registry",
              "instances": 1,
              "cpus": 0.5,
              "mem": 4096,
              "disk": 0,
              "executor": "",
              "constraints": [],
              "uris": [],
              "storeUrls": [],
              "ports": [
                5000
              ],
              "requirePorts": false,
              "backoffSeconds": 1,
              "backoffFactor": 1.15,
              "maxLaunchDelaySeconds": 3600,
              "container": {
                "type": "DOCKER",
                "volumes": [
                  {
                    "containerPath": "/docker_storage",
                    "hostPath": "/hdd/tools/docker/registry",
                    "mode": "RW"
                  }
                ],
                "docker": {
                  "image": "registry",
                  "network": "BRIDGE",
                  "portMappings": [
                    {
                      "containerPort": 5000,
                      "hostPort": 0,
                      "servicePort": 5000,
                      "protocol": "tcp"
                    }
                  ],
                  "privileged": false,
                  "parameters": [],
                  "forcePullImage": false
                }
              },
              "healthChecks": [],
              "dependencies": [],
              "upgradeStrategy": {
                "minimumHealthCapacity": 1,
                "maximumOverCapacity": 1
              },
              "version": "2015-08-19T21:26:47.616Z",
              "versionInfo": {
                "lastScalingAt": "2015-08-19T21:26:47.616Z",
                "lastConfigChangeAt": "2015-08-19T21:00:54.621Z"
              }
            }
          ],
          "groups": [],
          "dependencies": [],
          "version": "2015-09-17T10:38:20.875Z"
        }
      ],
      "dependencies": [],
      "version": "2015-09-17T10:38:20.875Z"
    }
  ],
  "dependencies": [],
  "version": "2015-09-17T10:38:20.875Z"
}</code></pre></div><div class="tab-pane" id="v2_groups_put_response"><h2>HTTP status code <a href="http://httpstatus.es/200" target="_blank">200</a></h2><p>A deployment is started which has a unique deployment identifier. The related deployment can be fetched from the /v2/deployments endpoint. If the deployement is gone from the list of deployments, than this means it is finished. As long as the deployment runs, the effect of that change operation is visible only partially.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{
  "deploymentId": "5ed4c0c5-9ff8-4a6f-a0cd-f57f59a34b43",
  "version": "2015-09-29T15:59:51.164Z"
}
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/400" target="_blank">400</a></h2><p>The group definition provided in the body is not valid.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{"message":"Invalid JSON","details":[{"path":"/id","errors":["error.expected.jsstring"]}]}
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/401" target="_blank">401</a></h2><p>Unauthorized. Authentication is enabled and you did not provide enough or wrong information to authenticate that request.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{ "message": "Invalid username or password." }
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/403" target="_blank">403</a></h2><p>Forbidden. Authorization is granted but the identity provided does not have sufficient access rights to do that action.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{ "message": "Not Authorized to perform this action!" }
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/409" target="_blank">409</a></h2><p>There is an already running deployment, that affects this application. To override this deployment, use the force=true flag</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{
 "message":"App is locked by one or more deployments. Override with the option &#39;?force=true&#39;. View details at &#39;/v2/deployments/&lt;DEPLOYMENT_ID&gt;&#39;.",
 "deployments":[{"id":"97c136bf-5a28-4821-9d94-480d9fbb01c8"}]
}
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/422" target="_blank">422</a></h2><p>The entity send can not be preocessed, since there are validation errors</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{
  "message":"Object is not valid",
  "details": [
    {
      "path":"/apps(0)/id",
      "errors": [
        "identifier /app is not child of /group. Hint: use relative paths."
      ]
    }
  ]
}
</code></pre></div></div></div></div></div></div><div class="modal fade" tabindex="0" id="v2_groups_post"><div class="modal-dialog"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button><h4 class="modal-title" id="myModalLabel"><span class="badge badge_post">post</span> <span class="parent"></span>/v2/groups</h4></div><div class="modal-body"><div class="alert alert-info"><p>Create and start a new application group. Application groups can contain other application groups.</p></div><ul class="nav nav-tabs"><li class="active"><a href="#v2_groups_post_request" data-toggle="tab">Request</a></li><li><a href="#v2_groups_post_response" data-toggle="tab">Response</a></li></ul><div class="tab-content"><div class="tab-pane active" id="v2_groups_post_request"><h3>Query Parameters</h3><ul><li><strong>force</strong>: <em>(boolean)</em><p>Only one deployment can be applied to one application at the same time. If the existing deployment should be canceled by this change, you can set force=true. Caution&#58; setting force=true will cancel the current deployment. This paramter should be used only, if the current deployment is unsuccessful!</p></li></ul><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Schema</strong>:</p><pre><code>{
  "$schema": "http://json-schema.org/schema#",
  "id": "https://raw.githubusercontent.com/mesosphere/marathon/master/docs/docs/rest-api/public/api/v2/schema/Group.json",
  "additionalProperties": false,
  "definitions": {
    "pathType": {
      "type": "string",
      "pattern": "^(\\/?((\\.{2})|([a-z0-9][a-z0-9\\-.]*[a-z0-9]+)|([a-z0-9]*))($|\\/))+$",
      "minLength": 1
    }
  },
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "$ref": "#/definitions/pathType",
      "description": "Unique identifier for the app consisting of a series of names separated by slashes. Each name must be at least 1 character and may only contain digits (`0-9`), dashes (`-`), dots (`.`), and lowercase letters (`a-z`). The name may not begin or end with a dash."
    },
    "apps": {
      "type": "array",
      "description": "The list of AppDefinitions in this group. See AppDefinition.json for the schema.",
      "items": {
        "$ref": "./AppDefinition.json"
      }
    },
    "groups": {
      "type": "array",
      "description": "Groups can build a tree. Each group can contain sub-groups. The sub-groups are defined here.",
      "items": {
        "$ref": "#"
      }
    },
    "dependencies": {
      "type": "array",
      "description": "A list of services upon which this application depends. An order is derived from the dependencies for performing start/stop and upgrade of the application. For example, an application /a relies on the services /b which itself relies on /c. To start all 3 applications, first /c is started than /b than /a.",
      "items": {
        "$ref": "#/definitions/pathType"
      }
    },
    "version": {
      "type": "string",
      "description": "The version of this definition.",
      "format": "date-time"
    }
  },
  "required": [
    "id"
  ]
}</code></pre><p><strong>Example</strong>:</p><pre><code>{
  "id": "/",
  "apps": [],
  "groups": [
    {
      "id": "/tools",
      "apps": [
        {
          "id": "/tools/oauth-server",
          "instances": 2,
          "cpus": 1,
          "mem": 1024,
          "disk": 0,
          "constraints": [
            [
              "hostname",
              "UNIQUE"
            ]
          ],
          "uris": [],
          "storeUrls": [],
          "ports": [
            1980
          ],
          "requirePorts": false,
          "backoffSeconds": 1,
          "backoffFactor": 1.15,
          "maxLaunchDelaySeconds": 3600,
          "container": {
            "type": "DOCKER",
            "volumes": [],
            "docker": {
              "image": "docker-registry/oauth_server:6d7d463cb8b1517002080a81cf23f9cf7b7fc774",
              "network": "HOST",
              "privileged": false,
              "parameters": [],
              "forcePullImage": false
            }
          },
          "healthChecks": [
            {
              "path": "/",
              "protocol": "HTTP",
              "portIndex": 0,
              "gracePeriodSeconds": 300,
              "intervalSeconds": 20,
              "timeoutSeconds": 20,
              "maxConsecutiveFailures": 3,
              "ignoreHttp1xx": false
            }
          ],
          "dependencies": [],
          "upgradeStrategy": {
            "minimumHealthCapacity": 0.5,
            "maximumOverCapacity": 0
          },
          "version": "2015-09-28T19:47:37.681Z",
          "versionInfo": {
            "lastScalingAt": "2015-09-28T19:47:37.681Z",
            "lastConfigChangeAt": "2015-09-28T19:47:37.681Z"
          }
        },
        {
          "id": "/tools/datadog-agent",
          "instances": 5,
          "cpus": 1,
          "mem": 512,
          "disk": 0,
          "executor": "",
          "constraints": [
            [
              "hostname",
              "UNIQUE"
            ]
          ],
          "uris": [],
          "storeUrls": [],
          "ports": [
            10018
          ],
          "requirePorts": false,
          "backoffSeconds": 1,
          "backoffFactor": 1.15,
          "maxLaunchDelaySeconds": 3600,
          "container": {
            "type": "DOCKER",
            "volumes": [
              {
                "containerPath": "/var/run/docker.sock",
                "hostPath": "/var/run/docker.sock",
                "mode": "RW"
              },
              {
                "containerPath": "/host/proc/mounts",
                "hostPath": "/proc/mounts",
                "mode": "RO"
              },
              {
                "containerPath": "/host/sys/fs/cgroup",
                "hostPath": "/sys/fs/cgroup/",
                "mode": "RO"
              }
            ],
            "docker": {
              "image": "datadog/docker-dd-agent:latest",
              "network": "HOST",
              "privileged": true,
              "parameters": [],
              "forcePullImage": false
            }
          },
          "healthChecks": [],
          "dependencies": [],
          "upgradeStrategy": {
            "minimumHealthCapacity": 0.5,
            "maximumOverCapacity": 0
          },
          "version": "2015-08-26T22:33:24.225Z",
          "versionInfo": {
            "lastScalingAt": "2015-08-26T22:33:24.225Z",
            "lastConfigChangeAt": "2015-05-19T13:59:18.899Z"
          }
        }
      ],
      "groups": [
        {
          "id": "/tools/log",
          "apps": [],
          "groups": [],
          "dependencies": [],
          "version": "2015-09-17T10:38:20.875Z"
        },
        {
          "id": "/tools/docker",
          "apps": [
            {
              "id": "/tools/docker/registry",
              "instances": 1,
              "cpus": 0.5,
              "mem": 4096,
              "disk": 0,
              "executor": "",
              "constraints": [],
              "uris": [],
              "storeUrls": [],
              "ports": [
                5000
              ],
              "requirePorts": false,
              "backoffSeconds": 1,
              "backoffFactor": 1.15,
              "maxLaunchDelaySeconds": 3600,
              "container": {
                "type": "DOCKER",
                "volumes": [
                  {
                    "containerPath": "/docker_storage",
                    "hostPath": "/hdd/tools/docker/registry",
                    "mode": "RW"
                  }
                ],
                "docker": {
                  "image": "registry",
                  "network": "BRIDGE",
                  "portMappings": [
                    {
                      "containerPort": 5000,
                      "hostPort": 0,
                      "servicePort": 5000,
                      "protocol": "tcp"
                    }
                  ],
                  "privileged": false,
                  "parameters": [],
                  "forcePullImage": false
                }
              },
              "healthChecks": [],
              "dependencies": [],
              "upgradeStrategy": {
                "minimumHealthCapacity": 1,
                "maximumOverCapacity": 1
              },
              "version": "2015-08-19T21:26:47.616Z",
              "versionInfo": {
                "lastScalingAt": "2015-08-19T21:26:47.616Z",
                "lastConfigChangeAt": "2015-08-19T21:00:54.621Z"
              }
            }
          ],
          "groups": [],
          "dependencies": [],
          "version": "2015-09-17T10:38:20.875Z"
        }
      ],
      "dependencies": [],
      "version": "2015-09-17T10:38:20.875Z"
    }
  ],
  "dependencies": [],
  "version": "2015-09-17T10:38:20.875Z"
}</code></pre></div><div class="tab-pane" id="v2_groups_post_response"><h2>HTTP status code <a href="http://httpstatus.es/200" target="_blank">200</a></h2><p>A deployment is started which has a unique deployment identifier. The related deployment can be fetched from the /v2/deployments endpoint. If the deployement is gone from the list of deployments, than this means it is finished. As long as the deployment runs, the effect of that change operation is visible only partially.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{
  "deploymentId": "5ed4c0c5-9ff8-4a6f-a0cd-f57f59a34b43",
  "version": "2015-09-29T15:59:51.164Z"
}
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/400" target="_blank">400</a></h2><p>The group definition provided in the body is not valid.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{"message":"Invalid JSON","details":[{"path":"/id","errors":["error.expected.jsstring"]}]}
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/401" target="_blank">401</a></h2><p>Unauthorized. Authentication is enabled and you did not provide enough or wrong information to authenticate that request.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{ "message": "Invalid username or password." }
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/403" target="_blank">403</a></h2><p>Forbidden. Authorization is granted but the identity provided does not have sufficient access rights to do that action.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{ "message": "Not Authorized to perform this action!" }
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/409" target="_blank">409</a></h2><p>There is an already deployed group with this name</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{"message":"Group / is already created. Use PUT to change this group."}
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/422" target="_blank">422</a></h2><p>The entity send can not be preocessed, since there are validation errors</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{
  "message":"Object is not valid",
  "details": [
    {
      "path":"/apps(0)/id",
      "errors": [
        "identifier /app is not child of /group. Hint: use relative paths."
      ]
    }
  ]
}
</code></pre></div></div></div></div></div></div><div class="modal fade" tabindex="0" id="v2_groups_delete"><div class="modal-dialog"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button><h4 class="modal-title" id="myModalLabel"><span class="badge badge_delete">delete</span> <span class="parent"></span>/v2/groups</h4></div><div class="modal-body"><div class="alert alert-info"><p>Destroy a group. All data about that group and all associated applications will be deleted. The failure or success of the action is signalled via events. There is a group_change_success and group_change_failed with the given version.</p></div><ul class="nav nav-tabs"><li class="active"><a href="#v2_groups_delete_request" data-toggle="tab">Request</a></li><li><a href="#v2_groups_delete_response" data-toggle="tab">Response</a></li></ul><div class="tab-content"><div class="tab-pane active" id="v2_groups_delete_request"><h3>Query Parameters</h3><ul><li><strong>force</strong>: <em>(boolean)</em><p>Only one deployment can be applied to one application at the same time. If the existing deployment should be canceled by this change, you can set force=true. Caution&#58; setting force=true will cancel the current deployment. This paramter should be used only, if the current deployment is unsuccessful!</p></li></ul></div><div class="tab-pane" id="v2_groups_delete_response"><h2>HTTP status code <a href="http://httpstatus.es/200" target="_blank">200</a></h2><p>A deployment is started which has a unique deployment identifier. The related deployment can be fetched from the /v2/deployments endpoint. If the deployement is gone from the list of deployments, than this means it is finished. As long as the deployment runs, the effect of that change operation is visible only partially.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{
  "deploymentId": "5ed4c0c5-9ff8-4a6f-a0cd-f57f59a34b43",
  "version": "2015-09-29T15:59:51.164Z"
}
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/401" target="_blank">401</a></h2><p>Unauthorized. Authentication is enabled and you did not provide enough or wrong information to authenticate that request.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{ "message": "Invalid username or password." }
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/403" target="_blank">403</a></h2><p>Forbidden. Authorization is granted but the identity provided does not have sufficient access rights to do that action.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{ "message": "Not Authorized to perform this action!" }
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/409" target="_blank">409</a></h2><p>There is an already running deployment, that affects this application. To override this deployment, use the force=true flag</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{
 "message":"App is locked by one or more deployments. Override with the option &#39;?force=true&#39;. View details at &#39;/v2/deployments/&lt;DEPLOYMENT_ID&gt;&#39;.",
 "deployments":[{"id":"97c136bf-5a28-4821-9d94-480d9fbb01c8"}]
}
</code></pre></div></div></div></div></div></div></div><div class="panel panel-white"><div class="panel-heading"><h4 class="panel-title"><a class="collapsed" data-toggle="collapse" href="#panel_v2_groups_versions"><span class="parent">/v2/groups</span>/versions</a> <span class="methods"><a href="#v2_groups_versions_get"><span class="badge badge_get">get</span></a></span></h4></div><div id="panel_v2_groups_versions" class="panel-collapse collapse"><div class="panel-body"><div class="list-group"><div onclick="window.location.href = '#v2_groups_versions_get'" class="list-group-item"><span class="badge badge_get">get</span><div class="method_description"><p>List all versions the group with the specified path.</p></div><div class="clearfix"></div></div></div></div></div><div class="modal fade" tabindex="0" id="v2_groups_versions_get"><div class="modal-dialog"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button><h4 class="modal-title" id="myModalLabel"><span class="badge badge_get">get</span> <span class="parent">/v2/groups</span>/versions</h4></div><div class="modal-body"><div class="alert alert-info"><p>List all versions the group with the specified path.</p></div><ul class="nav nav-tabs"><li class="active"><a href="#v2_groups_versions_get_response" data-toggle="tab">Response</a></li></ul><div class="tab-content"><div class="tab-pane active" id="v2_groups_versions_get_response"><h2>HTTP status code <a href="http://httpstatus.es/200" target="_blank">200</a></h2><p>List all available versions of that group.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>[ "2015-09-25T15:13:48.343Z", "2015-09-11T11:11:22.692Z", "2015-09-11T10:47:21.241Z" ]
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/401" target="_blank">401</a></h2><p>Unauthorized. Authentication is enabled and you did not provide enough or wrong information to authenticate that request.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{ "message": "Invalid username or password." }
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/403" target="_blank">403</a></h2><p>Forbidden. Authorization is granted but the identity provided does not have sufficient access rights to do that action.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{ "message": "Not Authorized to perform this action!" }
</code></pre></div></div></div></div></div></div></div></div></div></div><div class="panel panel-default"><div class="panel-heading"><h3 id="v2_groups__group_id_" class="panel-title">/v2/groups/{group_id}</h3></div><div class="panel-body"><div class="panel-group"><div class="panel panel-white"><div class="panel-heading"><h4 class="panel-title"><a class="collapsed" data-toggle="collapse" href="#panel_v2_groups__group_id_"><span class="parent"></span>/v2/groups/{group_id}</a> <span class="methods"><a href="#v2_groups__group_id__get"><span class="badge badge_get">get</span></a> <a href="#v2_groups__group_id__put"><span class="badge badge_put">put</span></a> <a href="#v2_groups__group_id__post"><span class="badge badge_post">post</span></a> <a href="#v2_groups__group_id__delete"><span class="badge badge_delete">delete</span></a></span></h4></div><div id="panel_v2_groups__group_id_" class="panel-collapse collapse"><div class="panel-body"><div class="list-group"><div onclick="window.location.href = '#v2_groups__group_id__get'" class="list-group-item"><span class="badge badge_get">get</span><div class="method_description"><p>Get the group with all applications and all transitive child groups.</p></div><div class="clearfix"></div></div><div onclick="window.location.href = '#v2_groups__group_id__put'" class="list-group-item"><span class="badge badge_put">put</span><div class="method_description"><p>Change parameters of a deployed application group. The new group parameters get applied.</p><ul><li>Changes to application parameters will result in a restart of this application.</li><li>A new application added to the group will be started.</li><li>An existing application removed from the group will be stopped.</li></ul><p>If there are no changes to the application definition, no restart is triggered. During restart marathon keeps track, that the configured amount of minimal running instances are <em>always</em> available. This method allows 2 special modes for the update operation&gt;</p><ul><li>Provide only the <code>version</code> field in the group definition. This will rollback the group to that given version</li><li>Provide only the <code>scaleBy</code> field will scale all transitive applications instance counts by the given factor.</li></ul><p>When one of version or scaleBy are set, nothing else than a version change or transitive instance count scaling will be applied. If both version and scaleBy are set, only a version rollback will be performed – the scaleBy value will not be applied. A deployment can run forever. This is the case, when the new application has a problem and does not become healthy. In this case, human interaction is needed with 2 possible choices</p><ul><li>Rollback to an existing older version</li><li>Update with a newer version of the group which does not have the problems of the old one.</li></ul><p>Since the deployment of the group can take a considerable amount of time, this endpoint returns immediately with a version. The failure or success of the action is signalled via event. There is a group_change_success and group_change_failed with the given version.</p></div><div class="clearfix"></div></div><div onclick="window.location.href = '#v2_groups__group_id__post'" class="list-group-item"><span class="badge badge_post">post</span><div class="method_description"><p>Create and start a new application group. Application groups can contain other application groups.</p></div><div class="clearfix"></div></div><div onclick="window.location.href = '#v2_groups__group_id__delete'" class="list-group-item"><span class="badge badge_delete">delete</span><div class="method_description"><p>Destroy a group. All data about that group and all associated applications will be deleted. The failure or success of the action is signalled via events. There is a group_change_success and group_change_failed with the given version.</p></div><div class="clearfix"></div></div></div></div></div><div class="modal fade" tabindex="0" id="v2_groups__group_id__get"><div class="modal-dialog"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button><h4 class="modal-title" id="myModalLabel"><span class="badge badge_get">get</span> <span class="parent"></span>/v2/groups/{group_id}</h4></div><div class="modal-body"><div class="alert alert-info"><p>Get the group with all applications and all transitive child groups.</p></div><ul class="nav nav-tabs"><li class="active"><a href="#v2_groups__group_id__get_request" data-toggle="tab">Request</a></li><li><a href="#v2_groups__group_id__get_response" data-toggle="tab">Response</a></li></ul><div class="tab-content"><div class="tab-pane active" id="v2_groups__group_id__get_request"><h3>URI Parameters</h3><ul><li><strong>group_id</strong>: <em>required (string)</em></li></ul><h3>Query Parameters</h3><ul><li><strong>embed</strong>: <em>(one of group.groups, group.apps, group.apps.tasks, group.apps.count, group.apps.deployments, group.apps.lastTaskFailure, group.apps.failures, group.apps.taskStats - repeat: true)</em><p>Embeds nested resources that match the supplied path. You can specify this parameter multiple times with different values. Unknown embed parameters are ignored. If you omit this parameter, it defaults to <code>group.groups</code>, <code>group.apps</code></p><ul><li><code>group.groups</code> embed all child groups of each group<br></li><li><code>group.apps</code> embed all apps of each group<br></li><li><code>group.apps.tasks</code> embed all tasks of each application<br></li><li><code>group.apps.counts</code> embed all task counts (tasksStaged, tasksRunning, tasksHealthy, tasksUnhealthy)<br></li><li><code>group.apps.deployments</code> embed all deployment identifier, if the related app currently is in deployment.</li><li><code>group.apps.lastTaskFailure</code> embeds the lastTaskFailure for the application if there is one.</li><li><code>group.apps.taskStats</code> exposes task statistics in the JSON.</li></ul><p><strong>Example</strong>:</p><pre>group.apps</pre></li></ul></div><div class="tab-pane" id="v2_groups__group_id__get_response"><h2>HTTP status code <a href="http://httpstatus.es/200" target="_blank">200</a></h2><p>The group with all transitive dependencies.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Schema</strong>:</p><pre><code>{
  "$schema": "http://json-schema.org/schema#",
  "id": "https://raw.githubusercontent.com/mesosphere/marathon/master/docs/docs/rest-api/public/api/v2/schema/Group.json",
  "additionalProperties": false,
  "definitions": {
    "pathType": {
      "type": "string",
      "pattern": "^(\\/?((\\.{2})|([a-z0-9][a-z0-9\\-.]*[a-z0-9]+)|([a-z0-9]*))($|\\/))+$",
      "minLength": 1
    }
  },
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "$ref": "#/definitions/pathType",
      "description": "Unique identifier for the app consisting of a series of names separated by slashes. Each name must be at least 1 character and may only contain digits (`0-9`), dashes (`-`), dots (`.`), and lowercase letters (`a-z`). The name may not begin or end with a dash."
    },
    "apps": {
      "type": "array",
      "description": "The list of AppDefinitions in this group. See AppDefinition.json for the schema.",
      "items": {
        "$ref": "./AppDefinition.json"
      }
    },
    "groups": {
      "type": "array",
      "description": "Groups can build a tree. Each group can contain sub-groups. The sub-groups are defined here.",
      "items": {
        "$ref": "#"
      }
    },
    "dependencies": {
      "type": "array",
      "description": "A list of services upon which this application depends. An order is derived from the dependencies for performing start/stop and upgrade of the application. For example, an application /a relies on the services /b which itself relies on /c. To start all 3 applications, first /c is started than /b than /a.",
      "items": {
        "$ref": "#/definitions/pathType"
      }
    },
    "version": {
      "type": "string",
      "description": "The version of this definition.",
      "format": "date-time"
    }
  },
  "required": [
    "id"
  ]
}</code></pre><p><strong>Example</strong>:</p><pre><code>{
  "id": "/",
  "apps": [],
  "groups": [
    {
      "id": "/tools",
      "apps": [
        {
          "id": "/tools/oauth-server",
          "instances": 2,
          "cpus": 1,
          "mem": 1024,
          "disk": 0,
          "constraints": [
            [
              "hostname",
              "UNIQUE"
            ]
          ],
          "uris": [],
          "storeUrls": [],
          "ports": [
            1980
          ],
          "requirePorts": false,
          "backoffSeconds": 1,
          "backoffFactor": 1.15,
          "maxLaunchDelaySeconds": 3600,
          "container": {
            "type": "DOCKER",
            "volumes": [],
            "docker": {
              "image": "docker-registry/oauth_server:6d7d463cb8b1517002080a81cf23f9cf7b7fc774",
              "network": "HOST",
              "privileged": false,
              "parameters": [],
              "forcePullImage": false
            }
          },
          "healthChecks": [
            {
              "path": "/",
              "protocol": "HTTP",
              "portIndex": 0,
              "gracePeriodSeconds": 300,
              "intervalSeconds": 20,
              "timeoutSeconds": 20,
              "maxConsecutiveFailures": 3,
              "ignoreHttp1xx": false
            }
          ],
          "dependencies": [],
          "upgradeStrategy": {
            "minimumHealthCapacity": 0.5,
            "maximumOverCapacity": 0
          },
          "version": "2015-09-28T19:47:37.681Z",
          "versionInfo": {
            "lastScalingAt": "2015-09-28T19:47:37.681Z",
            "lastConfigChangeAt": "2015-09-28T19:47:37.681Z"
          }
        },
        {
          "id": "/tools/datadog-agent",
          "instances": 5,
          "cpus": 1,
          "mem": 512,
          "disk": 0,
          "executor": "",
          "constraints": [
            [
              "hostname",
              "UNIQUE"
            ]
          ],
          "uris": [],
          "storeUrls": [],
          "ports": [
            10018
          ],
          "requirePorts": false,
          "backoffSeconds": 1,
          "backoffFactor": 1.15,
          "maxLaunchDelaySeconds": 3600,
          "container": {
            "type": "DOCKER",
            "volumes": [
              {
                "containerPath": "/var/run/docker.sock",
                "hostPath": "/var/run/docker.sock",
                "mode": "RW"
              },
              {
                "containerPath": "/host/proc/mounts",
                "hostPath": "/proc/mounts",
                "mode": "RO"
              },
              {
                "containerPath": "/host/sys/fs/cgroup",
                "hostPath": "/sys/fs/cgroup/",
                "mode": "RO"
              }
            ],
            "docker": {
              "image": "datadog/docker-dd-agent:latest",
              "network": "HOST",
              "privileged": true,
              "parameters": [],
              "forcePullImage": false
            }
          },
          "healthChecks": [],
          "dependencies": [],
          "upgradeStrategy": {
            "minimumHealthCapacity": 0.5,
            "maximumOverCapacity": 0
          },
          "version": "2015-08-26T22:33:24.225Z",
          "versionInfo": {
            "lastScalingAt": "2015-08-26T22:33:24.225Z",
            "lastConfigChangeAt": "2015-05-19T13:59:18.899Z"
          }
        }
      ],
      "groups": [
        {
          "id": "/tools/log",
          "apps": [],
          "groups": [],
          "dependencies": [],
          "version": "2015-09-17T10:38:20.875Z"
        },
        {
          "id": "/tools/docker",
          "apps": [
            {
              "id": "/tools/docker/registry",
              "instances": 1,
              "cpus": 0.5,
              "mem": 4096,
              "disk": 0,
              "executor": "",
              "constraints": [],
              "uris": [],
              "storeUrls": [],
              "ports": [
                5000
              ],
              "requirePorts": false,
              "backoffSeconds": 1,
              "backoffFactor": 1.15,
              "maxLaunchDelaySeconds": 3600,
              "container": {
                "type": "DOCKER",
                "volumes": [
                  {
                    "containerPath": "/docker_storage",
                    "hostPath": "/hdd/tools/docker/registry",
                    "mode": "RW"
                  }
                ],
                "docker": {
                  "image": "registry",
                  "network": "BRIDGE",
                  "portMappings": [
                    {
                      "containerPort": 5000,
                      "hostPort": 0,
                      "servicePort": 5000,
                      "protocol": "tcp"
                    }
                  ],
                  "privileged": false,
                  "parameters": [],
                  "forcePullImage": false
                }
              },
              "healthChecks": [],
              "dependencies": [],
              "upgradeStrategy": {
                "minimumHealthCapacity": 1,
                "maximumOverCapacity": 1
              },
              "version": "2015-08-19T21:26:47.616Z",
              "versionInfo": {
                "lastScalingAt": "2015-08-19T21:26:47.616Z",
                "lastConfigChangeAt": "2015-08-19T21:00:54.621Z"
              }
            }
          ],
          "groups": [],
          "dependencies": [],
          "version": "2015-09-17T10:38:20.875Z"
        }
      ],
      "dependencies": [],
      "version": "2015-09-17T10:38:20.875Z"
    }
  ],
  "dependencies": [],
  "version": "2015-09-17T10:38:20.875Z"
}</code></pre><h2>HTTP status code <a href="http://httpstatus.es/401" target="_blank">401</a></h2><p>Unauthorized. Authentication is enabled and you did not provide enough or wrong information to authenticate that request.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{ "message": "Invalid username or password." }
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/403" target="_blank">403</a></h2><p>Forbidden. Authorization is granted but the identity provided does not have sufficient access rights to do that action.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{ "message": "Not Authorized to perform this action!" }
</code></pre></div></div></div></div></div></div><div class="modal fade" tabindex="0" id="v2_groups__group_id__put"><div class="modal-dialog"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button><h4 class="modal-title" id="myModalLabel"><span class="badge badge_put">put</span> <span class="parent"></span>/v2/groups/{group_id}</h4></div><div class="modal-body"><div class="alert alert-info"><p>Change parameters of a deployed application group. The new group parameters get applied.</p><ul><li>Changes to application parameters will result in a restart of this application.</li><li>A new application added to the group will be started.</li><li>An existing application removed from the group will be stopped.</li></ul><p>If there are no changes to the application definition, no restart is triggered. During restart marathon keeps track, that the configured amount of minimal running instances are <em>always</em> available. This method allows 2 special modes for the update operation&gt;</p><ul><li>Provide only the <code>version</code> field in the group definition. This will rollback the group to that given version</li><li>Provide only the <code>scaleBy</code> field will scale all transitive applications instance counts by the given factor.</li></ul><p>When one of version or scaleBy are set, nothing else than a version change or transitive instance count scaling will be applied. If both version and scaleBy are set, only a version rollback will be performed – the scaleBy value will not be applied. A deployment can run forever. This is the case, when the new application has a problem and does not become healthy. In this case, human interaction is needed with 2 possible choices</p><ul><li>Rollback to an existing older version</li><li>Update with a newer version of the group which does not have the problems of the old one.</li></ul><p>Since the deployment of the group can take a considerable amount of time, this endpoint returns immediately with a version. The failure or success of the action is signalled via event. There is a group_change_success and group_change_failed with the given version.</p></div><ul class="nav nav-tabs"><li class="active"><a href="#v2_groups__group_id__put_request" data-toggle="tab">Request</a></li><li><a href="#v2_groups__group_id__put_response" data-toggle="tab">Response</a></li></ul><div class="tab-content"><div class="tab-pane active" id="v2_groups__group_id__put_request"><h3>URI Parameters</h3><ul><li><strong>group_id</strong>: <em>required (string)</em></li></ul><h3>Query Parameters</h3><ul><li><strong>force</strong>: <em>(boolean)</em><p>Only one deployment can be applied to one application at the same time. If the existing deployment should be canceled by this change, you can set force=true. Caution&#58; setting force=true will cancel the current deployment. This paramter should be used only, if the current deployment is unsuccessful!</p></li></ul><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Schema</strong>:</p><pre><code>{
  "$schema": "http://json-schema.org/schema#",
  "id": "https://raw.githubusercontent.com/mesosphere/marathon/master/docs/docs/rest-api/public/api/v2/schema/Group.json",
  "additionalProperties": false,
  "definitions": {
    "pathType": {
      "type": "string",
      "pattern": "^(\\/?((\\.{2})|([a-z0-9][a-z0-9\\-.]*[a-z0-9]+)|([a-z0-9]*))($|\\/))+$",
      "minLength": 1
    }
  },
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "$ref": "#/definitions/pathType",
      "description": "Unique identifier for the app consisting of a series of names separated by slashes. Each name must be at least 1 character and may only contain digits (`0-9`), dashes (`-`), dots (`.`), and lowercase letters (`a-z`). The name may not begin or end with a dash."
    },
    "apps": {
      "type": "array",
      "description": "The list of AppDefinitions in this group. See AppDefinition.json for the schema.",
      "items": {
        "$ref": "./AppDefinition.json"
      }
    },
    "groups": {
      "type": "array",
      "description": "Groups can build a tree. Each group can contain sub-groups. The sub-groups are defined here.",
      "items": {
        "$ref": "#"
      }
    },
    "dependencies": {
      "type": "array",
      "description": "A list of services upon which this application depends. An order is derived from the dependencies for performing start/stop and upgrade of the application. For example, an application /a relies on the services /b which itself relies on /c. To start all 3 applications, first /c is started than /b than /a.",
      "items": {
        "$ref": "#/definitions/pathType"
      }
    },
    "version": {
      "type": "string",
      "description": "The version of this definition.",
      "format": "date-time"
    }
  },
  "required": [
    "id"
  ]
}</code></pre><p><strong>Example</strong>:</p><pre><code>{
  "id": "/",
  "apps": [],
  "groups": [
    {
      "id": "/tools",
      "apps": [
        {
          "id": "/tools/oauth-server",
          "instances": 2,
          "cpus": 1,
          "mem": 1024,
          "disk": 0,
          "constraints": [
            [
              "hostname",
              "UNIQUE"
            ]
          ],
          "uris": [],
          "storeUrls": [],
          "ports": [
            1980
          ],
          "requirePorts": false,
          "backoffSeconds": 1,
          "backoffFactor": 1.15,
          "maxLaunchDelaySeconds": 3600,
          "container": {
            "type": "DOCKER",
            "volumes": [],
            "docker": {
              "image": "docker-registry/oauth_server:6d7d463cb8b1517002080a81cf23f9cf7b7fc774",
              "network": "HOST",
              "privileged": false,
              "parameters": [],
              "forcePullImage": false
            }
          },
          "healthChecks": [
            {
              "path": "/",
              "protocol": "HTTP",
              "portIndex": 0,
              "gracePeriodSeconds": 300,
              "intervalSeconds": 20,
              "timeoutSeconds": 20,
              "maxConsecutiveFailures": 3,
              "ignoreHttp1xx": false
            }
          ],
          "dependencies": [],
          "upgradeStrategy": {
            "minimumHealthCapacity": 0.5,
            "maximumOverCapacity": 0
          },
          "version": "2015-09-28T19:47:37.681Z",
          "versionInfo": {
            "lastScalingAt": "2015-09-28T19:47:37.681Z",
            "lastConfigChangeAt": "2015-09-28T19:47:37.681Z"
          }
        },
        {
          "id": "/tools/datadog-agent",
          "instances": 5,
          "cpus": 1,
          "mem": 512,
          "disk": 0,
          "executor": "",
          "constraints": [
            [
              "hostname",
              "UNIQUE"
            ]
          ],
          "uris": [],
          "storeUrls": [],
          "ports": [
            10018
          ],
          "requirePorts": false,
          "backoffSeconds": 1,
          "backoffFactor": 1.15,
          "maxLaunchDelaySeconds": 3600,
          "container": {
            "type": "DOCKER",
            "volumes": [
              {
                "containerPath": "/var/run/docker.sock",
                "hostPath": "/var/run/docker.sock",
                "mode": "RW"
              },
              {
                "containerPath": "/host/proc/mounts",
                "hostPath": "/proc/mounts",
                "mode": "RO"
              },
              {
                "containerPath": "/host/sys/fs/cgroup",
                "hostPath": "/sys/fs/cgroup/",
                "mode": "RO"
              }
            ],
            "docker": {
              "image": "datadog/docker-dd-agent:latest",
              "network": "HOST",
              "privileged": true,
              "parameters": [],
              "forcePullImage": false
            }
          },
          "healthChecks": [],
          "dependencies": [],
          "upgradeStrategy": {
            "minimumHealthCapacity": 0.5,
            "maximumOverCapacity": 0
          },
          "version": "2015-08-26T22:33:24.225Z",
          "versionInfo": {
            "lastScalingAt": "2015-08-26T22:33:24.225Z",
            "lastConfigChangeAt": "2015-05-19T13:59:18.899Z"
          }
        }
      ],
      "groups": [
        {
          "id": "/tools/log",
          "apps": [],
          "groups": [],
          "dependencies": [],
          "version": "2015-09-17T10:38:20.875Z"
        },
        {
          "id": "/tools/docker",
          "apps": [
            {
              "id": "/tools/docker/registry",
              "instances": 1,
              "cpus": 0.5,
              "mem": 4096,
              "disk": 0,
              "executor": "",
              "constraints": [],
              "uris": [],
              "storeUrls": [],
              "ports": [
                5000
              ],
              "requirePorts": false,
              "backoffSeconds": 1,
              "backoffFactor": 1.15,
              "maxLaunchDelaySeconds": 3600,
              "container": {
                "type": "DOCKER",
                "volumes": [
                  {
                    "containerPath": "/docker_storage",
                    "hostPath": "/hdd/tools/docker/registry",
                    "mode": "RW"
                  }
                ],
                "docker": {
                  "image": "registry",
                  "network": "BRIDGE",
                  "portMappings": [
                    {
                      "containerPort": 5000,
                      "hostPort": 0,
                      "servicePort": 5000,
                      "protocol": "tcp"
                    }
                  ],
                  "privileged": false,
                  "parameters": [],
                  "forcePullImage": false
                }
              },
              "healthChecks": [],
              "dependencies": [],
              "upgradeStrategy": {
                "minimumHealthCapacity": 1,
                "maximumOverCapacity": 1
              },
              "version": "2015-08-19T21:26:47.616Z",
              "versionInfo": {
                "lastScalingAt": "2015-08-19T21:26:47.616Z",
                "lastConfigChangeAt": "2015-08-19T21:00:54.621Z"
              }
            }
          ],
          "groups": [],
          "dependencies": [],
          "version": "2015-09-17T10:38:20.875Z"
        }
      ],
      "dependencies": [],
      "version": "2015-09-17T10:38:20.875Z"
    }
  ],
  "dependencies": [],
  "version": "2015-09-17T10:38:20.875Z"
}</code></pre></div><div class="tab-pane" id="v2_groups__group_id__put_response"><h2>HTTP status code <a href="http://httpstatus.es/200" target="_blank">200</a></h2><p>A deployment is started which has a unique deployment identifier. The related deployment can be fetched from the /v2/deployments endpoint. If the deployement is gone from the list of deployments, than this means it is finished. As long as the deployment runs, the effect of that change operation is visible only partially.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{
  "deploymentId": "5ed4c0c5-9ff8-4a6f-a0cd-f57f59a34b43",
  "version": "2015-09-29T15:59:51.164Z"
}
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/400" target="_blank">400</a></h2><p>The group definition provided in the body is not valid.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{"message":"Invalid JSON","details":[{"path":"/id","errors":["error.expected.jsstring"]}]}
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/401" target="_blank">401</a></h2><p>Unauthorized. Authentication is enabled and you did not provide enough or wrong information to authenticate that request.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{ "message": "Invalid username or password." }
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/403" target="_blank">403</a></h2><p>Forbidden. Authorization is granted but the identity provided does not have sufficient access rights to do that action.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{ "message": "Not Authorized to perform this action!" }
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/409" target="_blank">409</a></h2><p>There is an already running deployment, that affects this application. To override this deployment, use the force=true flag</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{
 "message":"App is locked by one or more deployments. Override with the option &#39;?force=true&#39;. View details at &#39;/v2/deployments/&lt;DEPLOYMENT_ID&gt;&#39;.",
 "deployments":[{"id":"97c136bf-5a28-4821-9d94-480d9fbb01c8"}]
}
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/422" target="_blank">422</a></h2><p>The entity send can not be preocessed, since there are validation errors</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{
  "message":"Object is not valid",
  "details": [
    {
      "path":"/apps(0)/id",
      "errors": [
        "identifier /app is not child of /group. Hint: use relative paths."
      ]
    }
  ]
}
</code></pre></div></div></div></div></div></div><div class="modal fade" tabindex="0" id="v2_groups__group_id__post"><div class="modal-dialog"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button><h4 class="modal-title" id="myModalLabel"><span class="badge badge_post">post</span> <span class="parent"></span>/v2/groups/{group_id}</h4></div><div class="modal-body"><div class="alert alert-info"><p>Create and start a new application group. Application groups can contain other application groups.</p></div><ul class="nav nav-tabs"><li class="active"><a href="#v2_groups__group_id__post_request" data-toggle="tab">Request</a></li><li><a href="#v2_groups__group_id__post_response" data-toggle="tab">Response</a></li></ul><div class="tab-content"><div class="tab-pane active" id="v2_groups__group_id__post_request"><h3>URI Parameters</h3><ul><li><strong>group_id</strong>: <em>required (string)</em></li></ul><h3>Query Parameters</h3><ul><li><strong>force</strong>: <em>(boolean)</em><p>Only one deployment can be applied to one application at the same time. If the existing deployment should be canceled by this change, you can set force=true. Caution&#58; setting force=true will cancel the current deployment. This paramter should be used only, if the current deployment is unsuccessful!</p></li></ul><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Schema</strong>:</p><pre><code>{
  "$schema": "http://json-schema.org/schema#",
  "id": "https://raw.githubusercontent.com/mesosphere/marathon/master/docs/docs/rest-api/public/api/v2/schema/Group.json",
  "additionalProperties": false,
  "definitions": {
    "pathType": {
      "type": "string",
      "pattern": "^(\\/?((\\.{2})|([a-z0-9][a-z0-9\\-.]*[a-z0-9]+)|([a-z0-9]*))($|\\/))+$",
      "minLength": 1
    }
  },
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "$ref": "#/definitions/pathType",
      "description": "Unique identifier for the app consisting of a series of names separated by slashes. Each name must be at least 1 character and may only contain digits (`0-9`), dashes (`-`), dots (`.`), and lowercase letters (`a-z`). The name may not begin or end with a dash."
    },
    "apps": {
      "type": "array",
      "description": "The list of AppDefinitions in this group. See AppDefinition.json for the schema.",
      "items": {
        "$ref": "./AppDefinition.json"
      }
    },
    "groups": {
      "type": "array",
      "description": "Groups can build a tree. Each group can contain sub-groups. The sub-groups are defined here.",
      "items": {
        "$ref": "#"
      }
    },
    "dependencies": {
      "type": "array",
      "description": "A list of services upon which this application depends. An order is derived from the dependencies for performing start/stop and upgrade of the application. For example, an application /a relies on the services /b which itself relies on /c. To start all 3 applications, first /c is started than /b than /a.",
      "items": {
        "$ref": "#/definitions/pathType"
      }
    },
    "version": {
      "type": "string",
      "description": "The version of this definition.",
      "format": "date-time"
    }
  },
  "required": [
    "id"
  ]
}</code></pre><p><strong>Example</strong>:</p><pre><code>{
  "id": "/",
  "apps": [],
  "groups": [
    {
      "id": "/tools",
      "apps": [
        {
          "id": "/tools/oauth-server",
          "instances": 2,
          "cpus": 1,
          "mem": 1024,
          "disk": 0,
          "constraints": [
            [
              "hostname",
              "UNIQUE"
            ]
          ],
          "uris": [],
          "storeUrls": [],
          "ports": [
            1980
          ],
          "requirePorts": false,
          "backoffSeconds": 1,
          "backoffFactor": 1.15,
          "maxLaunchDelaySeconds": 3600,
          "container": {
            "type": "DOCKER",
            "volumes": [],
            "docker": {
              "image": "docker-registry/oauth_server:6d7d463cb8b1517002080a81cf23f9cf7b7fc774",
              "network": "HOST",
              "privileged": false,
              "parameters": [],
              "forcePullImage": false
            }
          },
          "healthChecks": [
            {
              "path": "/",
              "protocol": "HTTP",
              "portIndex": 0,
              "gracePeriodSeconds": 300,
              "intervalSeconds": 20,
              "timeoutSeconds": 20,
              "maxConsecutiveFailures": 3,
              "ignoreHttp1xx": false
            }
          ],
          "dependencies": [],
          "upgradeStrategy": {
            "minimumHealthCapacity": 0.5,
            "maximumOverCapacity": 0
          },
          "version": "2015-09-28T19:47:37.681Z",
          "versionInfo": {
            "lastScalingAt": "2015-09-28T19:47:37.681Z",
            "lastConfigChangeAt": "2015-09-28T19:47:37.681Z"
          }
        },
        {
          "id": "/tools/datadog-agent",
          "instances": 5,
          "cpus": 1,
          "mem": 512,
          "disk": 0,
          "executor": "",
          "constraints": [
            [
              "hostname",
              "UNIQUE"
            ]
          ],
          "uris": [],
          "storeUrls": [],
          "ports": [
            10018
          ],
          "requirePorts": false,
          "backoffSeconds": 1,
          "backoffFactor": 1.15,
          "maxLaunchDelaySeconds": 3600,
          "container": {
            "type": "DOCKER",
            "volumes": [
              {
                "containerPath": "/var/run/docker.sock",
                "hostPath": "/var/run/docker.sock",
                "mode": "RW"
              },
              {
                "containerPath": "/host/proc/mounts",
                "hostPath": "/proc/mounts",
                "mode": "RO"
              },
              {
                "containerPath": "/host/sys/fs/cgroup",
                "hostPath": "/sys/fs/cgroup/",
                "mode": "RO"
              }
            ],
            "docker": {
              "image": "datadog/docker-dd-agent:latest",
              "network": "HOST",
              "privileged": true,
              "parameters": [],
              "forcePullImage": false
            }
          },
          "healthChecks": [],
          "dependencies": [],
          "upgradeStrategy": {
            "minimumHealthCapacity": 0.5,
            "maximumOverCapacity": 0
          },
          "version": "2015-08-26T22:33:24.225Z",
          "versionInfo": {
            "lastScalingAt": "2015-08-26T22:33:24.225Z",
            "lastConfigChangeAt": "2015-05-19T13:59:18.899Z"
          }
        }
      ],
      "groups": [
        {
          "id": "/tools/log",
          "apps": [],
          "groups": [],
          "dependencies": [],
          "version": "2015-09-17T10:38:20.875Z"
        },
        {
          "id": "/tools/docker",
          "apps": [
            {
              "id": "/tools/docker/registry",
              "instances": 1,
              "cpus": 0.5,
              "mem": 4096,
              "disk": 0,
              "executor": "",
              "constraints": [],
              "uris": [],
              "storeUrls": [],
              "ports": [
                5000
              ],
              "requirePorts": false,
              "backoffSeconds": 1,
              "backoffFactor": 1.15,
              "maxLaunchDelaySeconds": 3600,
              "container": {
                "type": "DOCKER",
                "volumes": [
                  {
                    "containerPath": "/docker_storage",
                    "hostPath": "/hdd/tools/docker/registry",
                    "mode": "RW"
                  }
                ],
                "docker": {
                  "image": "registry",
                  "network": "BRIDGE",
                  "portMappings": [
                    {
                      "containerPort": 5000,
                      "hostPort": 0,
                      "servicePort": 5000,
                      "protocol": "tcp"
                    }
                  ],
                  "privileged": false,
                  "parameters": [],
                  "forcePullImage": false
                }
              },
              "healthChecks": [],
              "dependencies": [],
              "upgradeStrategy": {
                "minimumHealthCapacity": 1,
                "maximumOverCapacity": 1
              },
              "version": "2015-08-19T21:26:47.616Z",
              "versionInfo": {
                "lastScalingAt": "2015-08-19T21:26:47.616Z",
                "lastConfigChangeAt": "2015-08-19T21:00:54.621Z"
              }
            }
          ],
          "groups": [],
          "dependencies": [],
          "version": "2015-09-17T10:38:20.875Z"
        }
      ],
      "dependencies": [],
      "version": "2015-09-17T10:38:20.875Z"
    }
  ],
  "dependencies": [],
  "version": "2015-09-17T10:38:20.875Z"
}</code></pre></div><div class="tab-pane" id="v2_groups__group_id__post_response"><h2>HTTP status code <a href="http://httpstatus.es/200" target="_blank">200</a></h2><p>A deployment is started which has a unique deployment identifier. The related deployment can be fetched from the /v2/deployments endpoint. If the deployement is gone from the list of deployments, than this means it is finished. As long as the deployment runs, the effect of that change operation is visible only partially.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{
  "deploymentId": "5ed4c0c5-9ff8-4a6f-a0cd-f57f59a34b43",
  "version": "2015-09-29T15:59:51.164Z"
}
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/400" target="_blank">400</a></h2><p>The group definition provided in the body is not valid.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{"message":"Invalid JSON","details":[{"path":"/id","errors":["error.expected.jsstring"]}]}
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/401" target="_blank">401</a></h2><p>Unauthorized. Authentication is enabled and you did not provide enough or wrong information to authenticate that request.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{ "message": "Invalid username or password." }
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/403" target="_blank">403</a></h2><p>Forbidden. Authorization is granted but the identity provided does not have sufficient access rights to do that action.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{ "message": "Not Authorized to perform this action!" }
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/409" target="_blank">409</a></h2><p>There is an already deployed group with this name</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{"message":"Group / is already created. Use PUT to change this group."}
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/422" target="_blank">422</a></h2><p>The entity send can not be preocessed, since there are validation errors</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{
  "message":"Object is not valid",
  "details": [
    {
      "path":"/apps(0)/id",
      "errors": [
        "identifier /app is not child of /group. Hint: use relative paths."
      ]
    }
  ]
}
</code></pre></div></div></div></div></div></div><div class="modal fade" tabindex="0" id="v2_groups__group_id__delete"><div class="modal-dialog"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button><h4 class="modal-title" id="myModalLabel"><span class="badge badge_delete">delete</span> <span class="parent"></span>/v2/groups/{group_id}</h4></div><div class="modal-body"><div class="alert alert-info"><p>Destroy a group. All data about that group and all associated applications will be deleted. The failure or success of the action is signalled via events. There is a group_change_success and group_change_failed with the given version.</p></div><ul class="nav nav-tabs"><li class="active"><a href="#v2_groups__group_id__delete_request" data-toggle="tab">Request</a></li><li><a href="#v2_groups__group_id__delete_response" data-toggle="tab">Response</a></li></ul><div class="tab-content"><div class="tab-pane active" id="v2_groups__group_id__delete_request"><h3>URI Parameters</h3><ul><li><strong>group_id</strong>: <em>required (string)</em></li></ul><h3>Query Parameters</h3><ul><li><strong>force</strong>: <em>(boolean)</em><p>Only one deployment can be applied to one application at the same time. If the existing deployment should be canceled by this change, you can set force=true. Caution&#58; setting force=true will cancel the current deployment. This paramter should be used only, if the current deployment is unsuccessful!</p></li></ul></div><div class="tab-pane" id="v2_groups__group_id__delete_response"><h2>HTTP status code <a href="http://httpstatus.es/200" target="_blank">200</a></h2><p>A deployment is started which has a unique deployment identifier. The related deployment can be fetched from the /v2/deployments endpoint. If the deployement is gone from the list of deployments, than this means it is finished. As long as the deployment runs, the effect of that change operation is visible only partially.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{
  "deploymentId": "5ed4c0c5-9ff8-4a6f-a0cd-f57f59a34b43",
  "version": "2015-09-29T15:59:51.164Z"
}
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/401" target="_blank">401</a></h2><p>Unauthorized. Authentication is enabled and you did not provide enough or wrong information to authenticate that request.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{ "message": "Invalid username or password." }
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/403" target="_blank">403</a></h2><p>Forbidden. Authorization is granted but the identity provided does not have sufficient access rights to do that action.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{ "message": "Not Authorized to perform this action!" }
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/409" target="_blank">409</a></h2><p>There is an already running deployment, that affects this application. To override this deployment, use the force=true flag</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{
 "message":"App is locked by one or more deployments. Override with the option &#39;?force=true&#39;. View details at &#39;/v2/deployments/&lt;DEPLOYMENT_ID&gt;&#39;.",
 "deployments":[{"id":"97c136bf-5a28-4821-9d94-480d9fbb01c8"}]
}
</code></pre></div></div></div></div></div></div></div><div class="panel panel-white"><div class="panel-heading"><h4 class="panel-title"><a class="collapsed" data-toggle="collapse" href="#panel_v2_groups__group_id__versions"><span class="parent">/v2/groups/{group_id}</span>/versions</a> <span class="methods"><a href="#v2_groups__group_id__versions_get"><span class="badge badge_get">get</span></a></span></h4></div><div id="panel_v2_groups__group_id__versions" class="panel-collapse collapse"><div class="panel-body"><div class="list-group"><div onclick="window.location.href = '#v2_groups__group_id__versions_get'" class="list-group-item"><span class="badge badge_get">get</span><div class="method_description"><p>List all versions the group with the specified path.</p></div><div class="clearfix"></div></div></div></div></div><div class="modal fade" tabindex="0" id="v2_groups__group_id__versions_get"><div class="modal-dialog"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button><h4 class="modal-title" id="myModalLabel"><span class="badge badge_get">get</span> <span class="parent">/v2/groups/{group_id}</span>/versions</h4></div><div class="modal-body"><div class="alert alert-info"><p>List all versions the group with the specified path.</p></div><ul class="nav nav-tabs"><li class="active"><a href="#v2_groups__group_id__versions_get_request" data-toggle="tab">Request</a></li><li><a href="#v2_groups__group_id__versions_get_response" data-toggle="tab">Response</a></li></ul><div class="tab-content"><div class="tab-pane active" id="v2_groups__group_id__versions_get_request"><h3>URI Parameters</h3><ul><li><strong>group_id</strong>: <em>required (string)</em></li></ul></div><div class="tab-pane" id="v2_groups__group_id__versions_get_response"><h2>HTTP status code <a href="http://httpstatus.es/200" target="_blank">200</a></h2><p>List all available versions of that group.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>[ "2015-09-25T15:13:48.343Z", "2015-09-11T11:11:22.692Z", "2015-09-11T10:47:21.241Z" ]
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/401" target="_blank">401</a></h2><p>Unauthorized. Authentication is enabled and you did not provide enough or wrong information to authenticate that request.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{ "message": "Invalid username or password." }
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/403" target="_blank">403</a></h2><p>Forbidden. Authorization is granted but the identity provided does not have sufficient access rights to do that action.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{ "message": "Not Authorized to perform this action!" }
</code></pre></div></div></div></div></div></div></div></div></div></div><div class="panel panel-default"><div class="panel-heading"><h3 id="v2_tasks" class="panel-title">/v2/tasks</h3></div><div class="panel-body"><div class="panel-group"><div class="panel panel-white"><div class="panel-heading"><h4 class="panel-title"><a class="collapsed" data-toggle="collapse" href="#panel_v2_tasks"><span class="parent"></span>/v2/tasks</a> <span class="methods"><a href="#v2_tasks_get"><span class="badge badge_get">get</span></a></span></h4></div><div id="panel_v2_tasks" class="panel-collapse collapse"><div class="panel-body"><div class="list-group"><div onclick="window.location.href = '#v2_tasks_get'" class="list-group-item"><span class="badge badge_get">get</span><div class="method_description"><p>List all running tasks.</p></div><div class="clearfix"></div></div></div></div></div><div class="modal fade" tabindex="0" id="v2_tasks_get"><div class="modal-dialog"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button><h4 class="modal-title" id="myModalLabel"><span class="badge badge_get">get</span> <span class="parent"></span>/v2/tasks</h4></div><div class="modal-body"><div class="alert alert-info"><p>List all running tasks.</p></div><ul class="nav nav-tabs"><li class="active"><a href="#v2_tasks_get_request" data-toggle="tab">Request</a></li><li><a href="#v2_tasks_get_response" data-toggle="tab">Response</a></li></ul><div class="tab-content"><div class="tab-pane active" id="v2_tasks_get_request"><h3>Query Parameters</h3><ul><li><strong>status</strong>: <em>(one of running, staging - repeat: true)</em><p>Filter the list of tasks by status</p></li></ul></div><div class="tab-pane" id="v2_tasks_get_response"><h2>HTTP status code <a href="http://httpstatus.es/200" target="_blank">200</a></h2><p>The list of all tasks disregarding their status, or a list of tasks matching the specified status filter.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{
  "tasks": [
    {
      "id": "frontend-foosball.083be411-5d1f-11e5-88f7-56b91e7a505b",
      "host": "srv4.example.com",
      "ports": [
        31292
      ],
      "startedAt": "2015-09-17T09:32:42.598Z",
      "stagedAt": "2015-09-17T09:32:36.822Z",
      "version": "2015-09-17T09:32:36.583Z",
      "slaveId": "20150707-153709-201330860-5050-12052-S0",
      "appId": "/frontend-foosball",
      "servicePorts": [
        10019
      ]
    },
    {
      "id": "tools_docker_registry.002b4d28-46b9-11e5-b731-525400cce7ed",
      "host": "srv2.example.com",
      "ports": [
        31721
      ],
      "startedAt": "2015-08-19T21:26:50.864Z",
      "stagedAt": "2015-08-19T21:26:49.040Z",
      "version": "2015-08-19T21:26:47.616Z",
      "slaveId": null,
      "appId": "/tools/docker/registry",
      "servicePorts": [
        5000
      ]
    }
  ]
}
</code></pre><p><strong>Type: text/plain</strong></p><p><strong>Example</strong>:</p><pre><code>frontend-foosball	10019	srv4.example.com:31292
tools_docker_registry	5000	srv2.example.com:31721
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/401" target="_blank">401</a></h2><p>Unauthorized. Authentication is enabled and you did not provide enough or wrong information to authenticate that request.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{ "message": "Invalid username or password." }
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/403" target="_blank">403</a></h2><p>Forbidden. Authorization is granted but the identity provided does not have sufficient access rights to do that action.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{ "message": "Not Authorized to perform this action!" }
</code></pre></div></div></div></div></div></div></div><div class="panel panel-white"><div class="panel-heading"><h4 class="panel-title"><a class="collapsed" data-toggle="collapse" href="#panel_v2_tasks_delete"><span class="parent">/v2/tasks</span>/delete</a> <span class="methods"><a href="#v2_tasks_delete_post"><span class="badge badge_post">post</span></a></span></h4></div><div id="panel_v2_tasks_delete" class="panel-collapse collapse"><div class="panel-body"><div class="list-group"><div onclick="window.location.href = '#v2_tasks_delete_post'" class="list-group-item"><span class="badge badge_post">post</span><div class="method_description"><p>Kill a list of running tasks.</p></div><div class="clearfix"></div></div></div></div></div><div class="modal fade" tabindex="0" id="v2_tasks_delete_post"><div class="modal-dialog"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button><h4 class="modal-title" id="myModalLabel"><span class="badge badge_post">post</span> <span class="parent">/v2/tasks</span>/delete</h4></div><div class="modal-body"><div class="alert alert-info"><p>Kill a list of running tasks.</p></div><ul class="nav nav-tabs"><li class="active"><a href="#v2_tasks_delete_post_request" data-toggle="tab">Request</a></li><li><a href="#v2_tasks_delete_post_response" data-toggle="tab">Response</a></li></ul><div class="tab-content"><div class="tab-pane active" id="v2_tasks_delete_post_request"><h3>Query Parameters</h3><ul><li><strong>force</strong>: <em>(boolean)</em><p>Only one deployment can be applied to one application at the same time. If the existing deployment should be canceled by this change, you can set force=true. Caution&#58; setting force=true will cancel the current deployment. This paramter should be used only, if the current deployment is unsuccessful!</p></li><li><strong>scale</strong>: <em>(boolean)</em><p>If <code>scale=true</code> is specified, then the related application is scaled down by the number of killed tasks.</p></li></ul><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{ "ids": [ "task1", "task2" ] }
</code></pre></div><div class="tab-pane" id="v2_tasks_delete_post_response"><h2>HTTP status code <a href="http://httpstatus.es/200" target="_blank">200</a></h2><p>If scale=false, all tasks that were killed are returned. If scale=true, than a deployment is triggered and the deployment is returned.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{
  "tasks": [
    {
      "id": "frontend-foosball.083be411-5d1f-11e5-88f7-56b91e7a505b",
      "host": "srv4.example.com",
      "ports": [
        31292
      ],
      "startedAt": "2015-09-17T09:32:42.598Z",
      "stagedAt": "2015-09-17T09:32:36.822Z",
      "version": "2015-09-17T09:32:36.583Z",
      "slaveId": "20150707-153709-201330860-5050-12052-S0",
      "appId": "/frontend-foosball",
      "servicePorts": [
        10019
      ]
    },
    {
      "id": "tools_docker_registry.002b4d28-46b9-11e5-b731-525400cce7ed",
      "host": "srv2.example.com",
      "ports": [
        31721
      ],
      "startedAt": "2015-08-19T21:26:50.864Z",
      "stagedAt": "2015-08-19T21:26:49.040Z",
      "version": "2015-08-19T21:26:47.616Z",
      "slaveId": null,
      "appId": "/tools/docker/registry",
      "servicePorts": [
        5000
      ]
    }
  ]
}
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/400" target="_blank">400</a></h2><p>There are unknown task ids, that can not be killed.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{"message":"Invalid task id not_known"}
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/401" target="_blank">401</a></h2><p>Unauthorized. Authentication is enabled and you did not provide enough or wrong information to authenticate that request.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{ "message": "Invalid username or password." }
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/403" target="_blank">403</a></h2><p>Forbidden. Authorization is granted but the identity provided does not have sufficient access rights to do that action.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{ "message": "Not Authorized to perform this action!" }
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/409" target="_blank">409</a></h2><p>There is an already running deployment, that affects this application. To override this deployment, use the force=true flag</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{
 "message":"App is locked by one or more deployments. Override with the option &#39;?force=true&#39;. View details at &#39;/v2/deployments/&lt;DEPLOYMENT_ID&gt;&#39;.",
 "deployments":[{"id":"97c136bf-5a28-4821-9d94-480d9fbb01c8"}]
}
</code></pre></div></div></div></div></div></div></div></div></div></div><div class="panel panel-default"><div class="panel-heading"><h3 id="v2_artifacts" class="panel-title">/v2/artifacts</h3></div><div class="panel-body"><div class="panel-group"><div class="panel panel-white"><div class="panel-heading"><h4 class="panel-title"><a class="collapsed" data-toggle="collapse" href="#panel_v2_artifacts"><span class="parent"></span>/v2/artifacts</a> <span class="methods"><a href="#v2_artifacts_post"><span class="badge badge_post">post</span></a></span></h4></div><div id="panel_v2_artifacts" class="panel-collapse collapse"><div class="panel-body"><div class="list-group"><div onclick="window.location.href = '#v2_artifacts_post'" class="list-group-item"><span class="badge badge_post">post</span><div class="method_description"><p>Upload an artifact to the artifact store. A multipart form upload request has to be performed. The form parameter name has to be <code>file</code>. The filename used in the artifact store, is the same as given by the form parameter. The response holds the URL of the artifact in the artifact store in the Location Header.</p></div><div class="clearfix"></div></div></div></div></div><div class="modal fade" tabindex="0" id="v2_artifacts_post"><div class="modal-dialog"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button><h4 class="modal-title" id="myModalLabel"><span class="badge badge_post">post</span> <span class="parent"></span>/v2/artifacts</h4></div><div class="modal-body"><div class="alert alert-info"><p>Upload an artifact to the artifact store. A multipart form upload request has to be performed. The form parameter name has to be <code>file</code>. The filename used in the artifact store, is the same as given by the form parameter. The response holds the URL of the artifact in the artifact store in the Location Header.</p></div><ul class="nav nav-tabs"><li class="active"><a href="#v2_artifacts_post_request" data-toggle="tab">Request</a></li><li><a href="#v2_artifacts_post_response" data-toggle="tab">Response</a></li></ul><div class="tab-content"><div class="tab-pane active" id="v2_artifacts_post_request"><h3>Body</h3><p><strong>Type: multipart/form-data</strong></p><strong>Form Parameters</strong><ul><li><strong>file</strong>: <em>(file)</em><p>The file to upload</p></li></ul></div><div class="tab-pane" id="v2_artifacts_post_response"><h2>HTTP status code <a href="http://httpstatus.es/200" target="_blank">200</a></h2><p>The file has been updated. No body is sent.</p><h2>HTTP status code <a href="http://httpstatus.es/201" target="_blank">201</a></h2><p>The file has been created. No body is sent.</p></div></div></div></div></div></div></div><div class="panel panel-white"><div class="panel-heading"><h4 class="panel-title"><a class="collapsed" data-toggle="collapse" href="#panel_v2_artifacts__path_"><span class="parent">/v2/artifacts</span>/{path}</a> <span class="methods"><a href="#v2_artifacts__path__put"><span class="badge badge_put">put</span></a> <a href="#v2_artifacts__path__post"><span class="badge badge_post">post</span></a> <a href="#v2_artifacts__path__delete"><span class="badge badge_delete">delete</span></a> <a href="#v2_artifacts__path__get"><span class="badge badge_get">get</span></a></span></h4></div><div id="panel_v2_artifacts__path_" class="panel-collapse collapse"><div class="panel-body"><div class="list-group"><div onclick="window.location.href = '#v2_artifacts__path__put'" class="list-group-item"><span class="badge badge_put">put</span><div class="method_description"><p>Upload an artifact to the artifact store. A multipart form upload request has to be performed. The form parameter name has to be <code>file</code>. The path used to store the file is taken from the url path. The response holds the URL of the artifact in the artifact store in the Location Header.</p></div><div class="clearfix"></div></div><div onclick="window.location.href = '#v2_artifacts__path__post'" class="list-group-item"><span class="badge badge_post">post</span><div class="method_description"><p>Upload an artifact to the artifact store. A multipart form upload request has to be performed. The form parameter name has to be <code>file</code>. The path used to store the file is taken from the url path. The response holds the URL of the artifact in the artifact store in the Location Header.</p></div><div class="clearfix"></div></div><div onclick="window.location.href = '#v2_artifacts__path__delete'" class="list-group-item"><span class="badge badge_delete">delete</span><div class="method_description"><p>Delete an artifact from the artifact store. The path is the relative path in the artifact store.</p></div><div class="clearfix"></div></div><div onclick="window.location.href = '#v2_artifacts__path__get'" class="list-group-item"><span class="badge badge_get">get</span><div class="method_description"><p>Download an artifact from the artifact store. The path is the relative path in the artifact store.</p></div><div class="clearfix"></div></div></div></div></div><div class="modal fade" tabindex="0" id="v2_artifacts__path__put"><div class="modal-dialog"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button><h4 class="modal-title" id="myModalLabel"><span class="badge badge_put">put</span> <span class="parent">/v2/artifacts</span>/{path}</h4></div><div class="modal-body"><div class="alert alert-info"><p>Upload an artifact to the artifact store. A multipart form upload request has to be performed. The form parameter name has to be <code>file</code>. The path used to store the file is taken from the url path. The response holds the URL of the artifact in the artifact store in the Location Header.</p></div><ul class="nav nav-tabs"><li class="active"><a href="#v2_artifacts__path__put_request" data-toggle="tab">Request</a></li><li><a href="#v2_artifacts__path__put_response" data-toggle="tab">Response</a></li></ul><div class="tab-content"><div class="tab-pane active" id="v2_artifacts__path__put_request"><h3>URI Parameters</h3><ul><li><strong>path</strong>: <em>required (string)</em></li></ul><h3>Body</h3><p><strong>Type: multipart/form-data</strong></p><strong>Form Parameters</strong><ul><li><strong>file</strong>: <em>(file)</em><p>The file to upload</p></li></ul></div><div class="tab-pane" id="v2_artifacts__path__put_response"><h2>HTTP status code <a href="http://httpstatus.es/200" target="_blank">200</a></h2><p>The file has been updated. No body is sent.</p><h2>HTTP status code <a href="http://httpstatus.es/201" target="_blank">201</a></h2><p>The file has been created. No body is sent.</p></div></div></div></div></div></div><div class="modal fade" tabindex="0" id="v2_artifacts__path__post"><div class="modal-dialog"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button><h4 class="modal-title" id="myModalLabel"><span class="badge badge_post">post</span> <span class="parent">/v2/artifacts</span>/{path}</h4></div><div class="modal-body"><div class="alert alert-info"><p>Upload an artifact to the artifact store. A multipart form upload request has to be performed. The form parameter name has to be <code>file</code>. The path used to store the file is taken from the url path. The response holds the URL of the artifact in the artifact store in the Location Header.</p></div><ul class="nav nav-tabs"><li class="active"><a href="#v2_artifacts__path__post_request" data-toggle="tab">Request</a></li><li><a href="#v2_artifacts__path__post_response" data-toggle="tab">Response</a></li></ul><div class="tab-content"><div class="tab-pane active" id="v2_artifacts__path__post_request"><h3>URI Parameters</h3><ul><li><strong>path</strong>: <em>required (string)</em></li></ul><h3>Body</h3><p><strong>Type: multipart/form-data</strong></p><strong>Form Parameters</strong><ul><li><strong>file</strong>: <em>(file)</em><p>The file to upload</p></li></ul></div><div class="tab-pane" id="v2_artifacts__path__post_response"><h2>HTTP status code <a href="http://httpstatus.es/200" target="_blank">200</a></h2><p>The file has been updated. No body is sent.</p><h2>HTTP status code <a href="http://httpstatus.es/201" target="_blank">201</a></h2><p>The file has been created. No body is sent.</p></div></div></div></div></div></div><div class="modal fade" tabindex="0" id="v2_artifacts__path__delete"><div class="modal-dialog"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button><h4 class="modal-title" id="myModalLabel"><span class="badge badge_delete">delete</span> <span class="parent">/v2/artifacts</span>/{path}</h4></div><div class="modal-body"><div class="alert alert-info"><p>Delete an artifact from the artifact store. The path is the relative path in the artifact store.</p></div><ul class="nav nav-tabs"><li class="active"><a href="#v2_artifacts__path__delete_request" data-toggle="tab">Request</a></li><li><a href="#v2_artifacts__path__delete_response" data-toggle="tab">Response</a></li></ul><div class="tab-content"><div class="tab-pane active" id="v2_artifacts__path__delete_request"><h3>URI Parameters</h3><ul><li><strong>path</strong>: <em>required (string)</em></li></ul></div><div class="tab-pane" id="v2_artifacts__path__delete_response"><h2>HTTP status code <a href="http://httpstatus.es/200" target="_blank">200</a></h2><p>The artifact with this path has been deleted.</p><h2>HTTP status code <a href="http://httpstatus.es/404" target="_blank">404</a></h2><p>There is no artifact in the artifact store with this path.</p></div></div></div></div></div></div><div class="modal fade" tabindex="0" id="v2_artifacts__path__get"><div class="modal-dialog"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button><h4 class="modal-title" id="myModalLabel"><span class="badge badge_get">get</span> <span class="parent">/v2/artifacts</span>/{path}</h4></div><div class="modal-body"><div class="alert alert-info"><p>Download an artifact from the artifact store. The path is the relative path in the artifact store.</p></div><ul class="nav nav-tabs"><li class="active"><a href="#v2_artifacts__path__get_request" data-toggle="tab">Request</a></li><li><a href="#v2_artifacts__path__get_response" data-toggle="tab">Response</a></li></ul><div class="tab-content"><div class="tab-pane active" id="v2_artifacts__path__get_request"><h3>URI Parameters</h3><ul><li><strong>path</strong>: <em>required (string)</em></li></ul></div><div class="tab-pane" id="v2_artifacts__path__get_response"><h2>HTTP status code <a href="http://httpstatus.es/200" target="_blank">200</a></h2><p>The response contains the content of the artifact with the given id. The content type depends on the content of the artifact.</p><h2>HTTP status code <a href="http://httpstatus.es/404" target="_blank">404</a></h2><p>There is no artifact in the artifact store with this path.</p></div></div></div></div></div></div></div></div></div></div><div class="panel panel-default"><div class="panel-heading"><h3 id="v2_events" class="panel-title">/v2/events</h3></div><div class="panel-body"><div class="panel-group"><div class="panel panel-white"><div class="panel-heading"><h4 class="panel-title"><a class="collapsed" data-toggle="collapse" href="#panel_v2_events"><span class="parent"></span>/v2/events</a> <span class="methods"><a href="#v2_events_get"><span class="badge badge_get">get</span></a></span></h4></div><div id="panel_v2_events" class="panel-collapse collapse"><div class="panel-body"><div class="list-group"><div onclick="window.location.href = '#v2_events_get'" class="list-group-item"><span class="badge badge_get">get</span><div class="method_description"><p>Attach to the marathon event stream. To use this endpoint, the client has to accept the text/event-stream content type. Please note a request to this endpoint will not be closed by the server. If an event happens on the server side, this event will be propagated to the client immediately. See <a href="http://www.w3schools.com/html/html5_serversentevents.asp">Server Sent Events</a> for a more detailed explanation. Note for ApiConsole&#58; this function will not yield the expected result from inside ApiConsole.</p></div><div class="clearfix"></div></div></div></div></div><div class="modal fade" tabindex="0" id="v2_events_get"><div class="modal-dialog"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button><h4 class="modal-title" id="myModalLabel"><span class="badge badge_get">get</span> <span class="parent"></span>/v2/events</h4></div><div class="modal-body"><div class="alert alert-info"><p>Attach to the marathon event stream. To use this endpoint, the client has to accept the text/event-stream content type. Please note a request to this endpoint will not be closed by the server. If an event happens on the server side, this event will be propagated to the client immediately. See <a href="http://www.w3schools.com/html/html5_serversentevents.asp">Server Sent Events</a> for a more detailed explanation. Note for ApiConsole&#58; this function will not yield the expected result from inside ApiConsole.</p></div><ul class="nav nav-tabs"><li class="active"><a href="#v2_events_get_response" data-toggle="tab">Response</a></li></ul><div class="tab-content"><div class="tab-pane active" id="v2_events_get_response"><h2>HTTP status code <a href="http://httpstatus.es/200" target="_blank">200</a></h2><p>the list of all tasks waiting to be scheduled.</p><h3>Body</h3><p><strong>Type: text/event-stream</strong></p><p><strong>Example</strong>:</p><pre><code>event: event_stream_attached
data: {"remoteAddress":"0:0:0:0:0:0:0:1","eventType":"event_stream_attached","timestamp":"2015-09-30T12:44:30.061Z"}

event: status_update_event
data: {"slaveId":"20150707-153709-218108076-5050-25588-S6","taskId":"foo.0664256e-6771-11e5-94e1-be5b2935a987","taskStatus":"TASK_FAILED","message":"Failed to launch container: Failed to fetch all URIs for container &#39;59d5cd89-091f-4454-940a-d9eb4361c640&#39; with exit status: 256","appId":"/foo","host":"srv5.hw.ca1.mesosphere.com","ports":[31776],"version":"2015-09-30T09:09:17.614Z","eventType":"status_update_event","timestamp":"2015-09-30T12:44:45.681Z"}

event: status_update_event
data: {"slaveId":"20150707-153709-201330860-5050-12052-S0","taskId":"test-app.5dd78972-6771-11e5-94e1-be5b2935a987","taskStatus":"TASK_RUNNING","message":"","appId":"/test-app","host":"srv4.hw.ca1.mesosphere.com","ports":[31182],"version":"2015-09-11T22:11:03.156Z","eventType":"status_update_event","timestamp":"2015-09-30T12:47:11.286Z"}


</code></pre><h2>HTTP status code <a href="http://httpstatus.es/405" target="_blank">405</a></h2><p>A request has been made without the correct Accept Header</p><h3>Body</h3><p><strong>Type: text/html</strong></p><p><strong>Example</strong>:</p><pre><code>&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/&gt;
&lt;title&gt;Error 405 &lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;h2&gt;HTTP ERROR: 405&lt;/h2&gt;
&lt;p&gt;Problem accessing /v2/events. Reason:
&lt;pre&gt;    HTTP method GET is not supported by this URL&lt;/pre&gt;&lt;/p&gt;
&lt;hr /&gt;&lt;a href="http://eclipse.org/jetty"&gt;Powered by Jetty:// 9.3.z-SNAPSHOT&lt;/a&gt;&lt;hr/&gt;
&lt;/body&gt;
&lt;/html&gt;
</code></pre></div></div></div></div></div></div></div></div></div></div><div class="panel panel-default"><div class="panel-heading"><h3 id="v2_eventSubscriptions" class="panel-title">/v2/eventSubscriptions</h3></div><div class="panel-body"><div class="panel-group"><div class="panel panel-white"><div class="panel-heading"><h4 class="panel-title"><a class="collapsed" data-toggle="collapse" href="#panel_v2_eventSubscriptions"><span class="parent"></span>/v2/eventSubscriptions</a> <span class="methods"><a href="#v2_eventSubscriptions_get"><span class="badge badge_get">get</span></a> <a href="#v2_eventSubscriptions_post"><span class="badge badge_post">post</span></a> <a href="#v2_eventSubscriptions_delete"><span class="badge badge_delete">delete</span></a></span></h4></div><div id="panel_v2_eventSubscriptions" class="panel-collapse collapse"><div class="panel-body"><div class="list-group"><div onclick="window.location.href = '#v2_eventSubscriptions_get'" class="list-group-item"><span class="badge badge_get">get</span><div class="method_description"><p>List all event subscriber callback URLs. _NOTE To activate this endpoint, you need to startup a Marathon instance with <code>--event_subscriber http_callback</code>_</p></div><div class="clearfix"></div></div><div onclick="window.location.href = '#v2_eventSubscriptions_post'" class="list-group-item"><span class="badge badge_post">post</span><div class="method_description"><p>Subscribe to the event callback mechanism with the specified callback URL.</p></div><div class="clearfix"></div></div><div onclick="window.location.href = '#v2_eventSubscriptions_delete'" class="list-group-item"><span class="badge badge_delete">delete</span><div class="method_description"><p>Unregister a callback URL from the event subscribers list.</p></div><div class="clearfix"></div></div></div></div></div><div class="modal fade" tabindex="0" id="v2_eventSubscriptions_get"><div class="modal-dialog"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button><h4 class="modal-title" id="myModalLabel"><span class="badge badge_get">get</span> <span class="parent"></span>/v2/eventSubscriptions</h4></div><div class="modal-body"><div class="alert alert-info"><p>List all event subscriber callback URLs. _NOTE To activate this endpoint, you need to startup a Marathon instance with <code>--event_subscriber http_callback</code>_</p></div><ul class="nav nav-tabs"><li class="active"><a href="#v2_eventSubscriptions_get_response" data-toggle="tab">Response</a></li></ul><div class="tab-content"><div class="tab-pane active" id="v2_eventSubscriptions_get_response"><h2>HTTP status code <a href="http://httpstatus.es/200" target="_blank">200</a></h2><p>Return the list of all subscription endpoints</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{
    "callbackUrls": [
        "http://server123:9090/callback",
        "http://server234:9191/callback"
    ]
}
</code></pre></div></div></div></div></div></div><div class="modal fade" tabindex="0" id="v2_eventSubscriptions_post"><div class="modal-dialog"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button><h4 class="modal-title" id="myModalLabel"><span class="badge badge_post">post</span> <span class="parent"></span>/v2/eventSubscriptions</h4></div><div class="modal-body"><div class="alert alert-info"><p>Subscribe to the event callback mechanism with the specified callback URL.</p></div><ul class="nav nav-tabs"><li class="active"><a href="#v2_eventSubscriptions_post_request" data-toggle="tab">Request</a></li><li><a href="#v2_eventSubscriptions_post_response" data-toggle="tab">Response</a></li></ul><div class="tab-content"><div class="tab-pane active" id="v2_eventSubscriptions_post_request"><h3>Query Parameters</h3><ul><li><strong>callbackUrl</strong>: <em>(string - pattern: ^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$)</em><p>The URL to an endpoint that is able to handle post requests for every event that is send.</p></li></ul></div><div class="tab-pane" id="v2_eventSubscriptions_post_response"><h2>HTTP status code <a href="http://httpstatus.es/200" target="_blank">200</a></h2><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{
    "callbackUrl": "http://localhost:9292/callback",
    "clientIp": "127.0.0.1",
    "eventType": "subscribe_event"
}
</code></pre></div></div></div></div></div></div><div class="modal fade" tabindex="0" id="v2_eventSubscriptions_delete"><div class="modal-dialog"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button><h4 class="modal-title" id="myModalLabel"><span class="badge badge_delete">delete</span> <span class="parent"></span>/v2/eventSubscriptions</h4></div><div class="modal-body"><div class="alert alert-info"><p>Unregister a callback URL from the event subscribers list.</p></div><ul class="nav nav-tabs"><li class="active"><a href="#v2_eventSubscriptions_delete_request" data-toggle="tab">Request</a></li><li><a href="#v2_eventSubscriptions_delete_response" data-toggle="tab">Response</a></li></ul><div class="tab-content"><div class="tab-pane active" id="v2_eventSubscriptions_delete_request"><h3>Query Parameters</h3><ul><li><strong>callbackUrl</strong>: <em>(string - pattern: ^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$)</em><p>The URL to an endpoint that is able to handle post requests for every event that is send.</p></li></ul></div><div class="tab-pane" id="v2_eventSubscriptions_delete_response"><h2>HTTP status code <a href="http://httpstatus.es/200" target="_blank">200</a></h2><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{
    "callbackUrl": "http://localhost:9292/callback",
    "clientIp": "127.0.0.1",
    "eventType": "unsubscribe_event"
}
</code></pre></div></div></div></div></div></div></div></div></div></div><div class="panel panel-default"><div class="panel-heading"><h3 id="v2_info" class="panel-title">/v2/info</h3></div><div class="panel-body"><div class="panel-group"><div class="panel panel-white"><div class="panel-heading"><h4 class="panel-title"><a class="collapsed" data-toggle="collapse" href="#panel_v2_info"><span class="parent"></span>/v2/info</a> <span class="methods"><a href="#v2_info_get"><span class="badge badge_get">get</span></a></span></h4></div><div id="panel_v2_info" class="panel-collapse collapse"><div class="panel-body"><div class="list-group"><div onclick="window.location.href = '#v2_info_get'" class="list-group-item"><span class="badge badge_get">get</span><div class="method_description"><p>Get info about the Marathon Instance</p></div><div class="clearfix"></div></div></div></div></div><div class="modal fade" tabindex="0" id="v2_info_get"><div class="modal-dialog"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button><h4 class="modal-title" id="myModalLabel"><span class="badge badge_get">get</span> <span class="parent"></span>/v2/info</h4></div><div class="modal-body"><div class="alert alert-info"><p>Get info about the Marathon Instance</p></div><ul class="nav nav-tabs"><li class="active"><a href="#v2_info_get_response" data-toggle="tab">Response</a></li></ul><div class="tab-content"><div class="tab-pane active" id="v2_info_get_response"><h2>HTTP status code <a href="http://httpstatus.es/200" target="_blank">200</a></h2><p>General configuration and runtime information about this Marathon instance.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{
  "name": "marathon",
  "version": "0.13.0-SNAPSHOT",
  "elected": true,
  "leader": "wrk.fritz.box:8080",
  "frameworkId": "80ba2050-bf0f-4472-a2f7-2636c4f7b8c8-0000",
  "marathon_config": {
    "master": "127.0.0.1:5050",
    "failover_timeout": 604800,
    "framework_name": "marathon",
    "ha": true,
    "checkpoint": true,
    "local_port_min": 10000,
    "local_port_max": 20000,
    "executor": "//cmd",
    "hostname": "wrk.fritz.box",
    "webui_url": null,
    "mesos_role": null,
    "task_launch_timeout": 300000,
    "reconciliation_initial_delay": 15000,
    "reconciliation_interval": 300000,
    "marathon_store_timeout": 2000,
    "mesos_user": "matthias",
    "leader_proxy_connection_timeout_ms": 5000,
    "leader_proxy_read_timeout_ms": 10000,
    "mesos_leader_ui_url": null
  },
  "zookeeper_config": {
    "zk": "zk://localhost:2181/marathon",
    "zk_timeout": 10000,
    "zk_session_timeout": 1800000,
    "zk_max_versions": 25
  },
  "event_subscriber": null,
  "http_config": {
    "assets_path": null,
    "http_port": 8080,
    "https_port": 8443
  }
}
</code></pre></div></div></div></div></div></div></div></div></div></div><div class="panel panel-default"><div class="panel-heading"><h3 id="v2_leader" class="panel-title">/v2/leader</h3></div><div class="panel-body"><div class="panel-group"><div class="panel panel-white"><div class="panel-heading"><h4 class="panel-title"><a class="collapsed" data-toggle="collapse" href="#panel_v2_leader"><span class="parent"></span>/v2/leader</a> <span class="methods"><a href="#v2_leader_get"><span class="badge badge_get">get</span></a> <a href="#v2_leader_delete"><span class="badge badge_delete">delete</span></a></span></h4></div><div id="panel_v2_leader" class="panel-collapse collapse"><div class="panel-body"><div class="list-group"><div onclick="window.location.href = '#v2_leader_get'" class="list-group-item"><span class="badge badge_get">get</span><div class="method_description"><p>Returns the current leader.</p></div><div class="clearfix"></div></div><div onclick="window.location.href = '#v2_leader_delete'" class="list-group-item"><span class="badge badge_delete">delete</span><div class="method_description"><p>Causes the current leader to abdicate, triggering a new election.</p></div><div class="clearfix"></div></div></div></div></div><div class="modal fade" tabindex="0" id="v2_leader_get"><div class="modal-dialog"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button><h4 class="modal-title" id="myModalLabel"><span class="badge badge_get">get</span> <span class="parent"></span>/v2/leader</h4></div><div class="modal-body"><div class="alert alert-info"><p>Returns the current leader.</p></div><ul class="nav nav-tabs"><li class="active"><a href="#v2_leader_get_response" data-toggle="tab">Response</a></li></ul><div class="tab-content"><div class="tab-pane active" id="v2_leader_get_response"><h2>HTTP status code <a href="http://httpstatus.es/200" target="_blank">200</a></h2><p>The host and port of the current leading master.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{
    "leader": "marathon.globalcorp.com:8080"
}
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/404" target="_blank">404</a></h2><p>If there is no current leader.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{
  "message":"There is no leader"
}
</code></pre></div></div></div></div></div></div><div class="modal fade" tabindex="0" id="v2_leader_delete"><div class="modal-dialog"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button><h4 class="modal-title" id="myModalLabel"><span class="badge badge_delete">delete</span> <span class="parent"></span>/v2/leader</h4></div><div class="modal-body"><div class="alert alert-info"><p>Causes the current leader to abdicate, triggering a new election.</p></div><ul class="nav nav-tabs"><li class="active"><a href="#v2_leader_delete_response" data-toggle="tab">Response</a></li></ul><div class="tab-content"><div class="tab-pane active" id="v2_leader_delete_response"><h2>HTTP status code <a href="http://httpstatus.es/200" target="_blank">200</a></h2><p>The abdication message from the current leader.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{
    "message": "Leadership abdicated"
}
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/404" target="_blank">404</a></h2><p>If there is no current leader.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{
  "message":"There is no leader"
}</code></pre></div></div></div></div></div></div></div></div></div></div><div class="panel panel-default"><div class="panel-heading"><h3 id="v2_plugins" class="panel-title">/v2/plugins</h3></div><div class="panel-body"><div class="panel-group"><div class="panel panel-white"><div class="panel-heading"><h4 class="panel-title"><a class="collapsed" data-toggle="collapse" href="#panel_v2_plugins"><span class="parent"></span>/v2/plugins</a> <span class="methods"><a href="#v2_plugins_get"><span class="badge badge_get">get</span></a></span></h4></div><div id="panel_v2_plugins" class="panel-collapse collapse"><div class="panel-body"><div class="list-group"><div onclick="window.location.href = '#v2_plugins_get'" class="list-group-item"><span class="badge badge_get">get</span><div class="method_description"><p>Returns the list of all loaded plugins</p></div><div class="clearfix"></div></div></div></div></div><div class="modal fade" tabindex="0" id="v2_plugins_get"><div class="modal-dialog"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button><h4 class="modal-title" id="myModalLabel"><span class="badge badge_get">get</span> <span class="parent"></span>/v2/plugins</h4></div><div class="modal-body"><div class="alert alert-info"><p>Returns the list of all loaded plugins</p></div><ul class="nav nav-tabs"><li class="active"><a href="#v2_plugins_get_response" data-toggle="tab">Response</a></li></ul><div class="tab-content"><div class="tab-pane active" id="v2_plugins_get_response"><h2>HTTP status code <a href="http://httpstatus.es/200" target="_blank">200</a></h2><p>The list of all loaded plugins</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{
    "plugins": [
        {
            "id": "webjar",
            "implementation": "mesosphere.marathon.example.plugin.http.WebJarHandler",
            "info": {
                "version": "1.2.3",
                "array": [ 1, 2, 3, 4, 5, 6 ],
                "test": true
            },
            "plugin": "mesosphere.marathon.plugin.http.HttpRequestHandler",
            "tags": [ "webjar", "test" ]
        }
    ]
}
</code></pre></div></div></div></div></div></div></div><div class="panel panel-white"><div class="panel-heading"><h4 class="panel-title"><a class="collapsed" data-toggle="collapse" href="#panel_v2_plugins__plugin_id___path_"><span class="parent">/v2/plugins</span>/{plugin_id}/{path}</a> <span class="methods"><a href="#v2_plugins__plugin_id___path__get"><span class="badge badge_get">get</span></a> <a href="#v2_plugins__plugin_id___path__put"><span class="badge badge_put">put</span></a> <a href="#v2_plugins__plugin_id___path__post"><span class="badge badge_post">post</span></a> <a href="#v2_plugins__plugin_id___path__delete"><span class="badge badge_delete">delete</span></a></span></h4></div><div id="panel_v2_plugins__plugin_id___path_" class="panel-collapse collapse"><div class="panel-body"><div class="list-group"><div onclick="window.location.href = '#v2_plugins__plugin_id___path__get'" class="list-group-item"><span class="badge badge_get">get</span><div class="method_description"><p>Get request is handled by the plugin.</p></div><div class="clearfix"></div></div><div onclick="window.location.href = '#v2_plugins__plugin_id___path__put'" class="list-group-item"><span class="badge badge_put">put</span><div class="method_description"><p>Put request is handled by the plugin.</p></div><div class="clearfix"></div></div><div onclick="window.location.href = '#v2_plugins__plugin_id___path__post'" class="list-group-item"><span class="badge badge_post">post</span><div class="method_description"><p>Post request is handled by the plugin.</p></div><div class="clearfix"></div></div><div onclick="window.location.href = '#v2_plugins__plugin_id___path__delete'" class="list-group-item"><span class="badge badge_delete">delete</span><div class="method_description"><p>Delete request is handled by the plugin.</p></div><div class="clearfix"></div></div></div></div></div><div class="modal fade" tabindex="0" id="v2_plugins__plugin_id___path__get"><div class="modal-dialog"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button><h4 class="modal-title" id="myModalLabel"><span class="badge badge_get">get</span> <span class="parent">/v2/plugins</span>/{plugin_id}/{path}</h4></div><div class="modal-body"><div class="alert alert-info"><p>Get request is handled by the plugin.</p></div><ul class="nav nav-tabs"><li class="active"><a href="#v2_plugins__plugin_id___path__get_request" data-toggle="tab">Request</a></li></ul><div class="tab-content"><div class="tab-pane active" id="v2_plugins__plugin_id___path__get_request"><h3>URI Parameters</h3><ul><li><strong>plugin_id</strong>: <em>required (string)</em></li><li><strong>path</strong>: <em>required (string)</em></li></ul></div></div></div></div></div></div><div class="modal fade" tabindex="0" id="v2_plugins__plugin_id___path__put"><div class="modal-dialog"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button><h4 class="modal-title" id="myModalLabel"><span class="badge badge_put">put</span> <span class="parent">/v2/plugins</span>/{plugin_id}/{path}</h4></div><div class="modal-body"><div class="alert alert-info"><p>Put request is handled by the plugin.</p></div><ul class="nav nav-tabs"><li class="active"><a href="#v2_plugins__plugin_id___path__put_request" data-toggle="tab">Request</a></li></ul><div class="tab-content"><div class="tab-pane active" id="v2_plugins__plugin_id___path__put_request"><h3>URI Parameters</h3><ul><li><strong>plugin_id</strong>: <em>required (string)</em></li><li><strong>path</strong>: <em>required (string)</em></li></ul></div></div></div></div></div></div><div class="modal fade" tabindex="0" id="v2_plugins__plugin_id___path__post"><div class="modal-dialog"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button><h4 class="modal-title" id="myModalLabel"><span class="badge badge_post">post</span> <span class="parent">/v2/plugins</span>/{plugin_id}/{path}</h4></div><div class="modal-body"><div class="alert alert-info"><p>Post request is handled by the plugin.</p></div><ul class="nav nav-tabs"><li class="active"><a href="#v2_plugins__plugin_id___path__post_request" data-toggle="tab">Request</a></li></ul><div class="tab-content"><div class="tab-pane active" id="v2_plugins__plugin_id___path__post_request"><h3>URI Parameters</h3><ul><li><strong>plugin_id</strong>: <em>required (string)</em></li><li><strong>path</strong>: <em>required (string)</em></li></ul></div></div></div></div></div></div><div class="modal fade" tabindex="0" id="v2_plugins__plugin_id___path__delete"><div class="modal-dialog"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button><h4 class="modal-title" id="myModalLabel"><span class="badge badge_delete">delete</span> <span class="parent">/v2/plugins</span>/{plugin_id}/{path}</h4></div><div class="modal-body"><div class="alert alert-info"><p>Delete request is handled by the plugin.</p></div><ul class="nav nav-tabs"><li class="active"><a href="#v2_plugins__plugin_id___path__delete_request" data-toggle="tab">Request</a></li></ul><div class="tab-content"><div class="tab-pane active" id="v2_plugins__plugin_id___path__delete_request"><h3>URI Parameters</h3><ul><li><strong>plugin_id</strong>: <em>required (string)</em></li><li><strong>path</strong>: <em>required (string)</em></li></ul></div></div></div></div></div></div></div></div></div></div><div class="panel panel-default"><div class="panel-heading"><h3 id="v2_queue" class="panel-title">/v2/queue</h3></div><div class="panel-body"><div class="panel-group"><div class="panel panel-white"><div class="panel-heading"><h4 class="panel-title"><a class="collapsed" data-toggle="collapse" href="#panel_v2_queue"><span class="parent"></span>/v2/queue</a> <span class="methods"><a href="#v2_queue_get"><span class="badge badge_get">get</span></a></span></h4></div><div id="panel_v2_queue" class="panel-collapse collapse"><div class="panel-body"><div class="list-group"><div onclick="window.location.href = '#v2_queue_get'" class="list-group-item"><span class="badge badge_get">get</span><div class="method_description"><p>List all the tasks queued up or waiting to be scheduled. This is mainly used for troubleshooting and occurs when scaling changes are requested and the volume of scaling changes out paces the ability to schedule those tasks. In addition to the application in the queue, you see also the task count that needs to be started. If the task has a rate limit, then a delay to the start gets applied. You can see this delay for every application with the seconds to wait before the next launch will be tried.</p></div><div class="clearfix"></div></div></div></div></div><div class="modal fade" tabindex="0" id="v2_queue_get"><div class="modal-dialog"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button><h4 class="modal-title" id="myModalLabel"><span class="badge badge_get">get</span> <span class="parent"></span>/v2/queue</h4></div><div class="modal-body"><div class="alert alert-info"><p>List all the tasks queued up or waiting to be scheduled. This is mainly used for troubleshooting and occurs when scaling changes are requested and the volume of scaling changes out paces the ability to schedule those tasks. In addition to the application in the queue, you see also the task count that needs to be started. If the task has a rate limit, then a delay to the start gets applied. You can see this delay for every application with the seconds to wait before the next launch will be tried.</p></div><ul class="nav nav-tabs"><li class="active"><a href="#v2_queue_get_response" data-toggle="tab">Response</a></li></ul><div class="tab-content"><div class="tab-pane active" id="v2_queue_get_response"><h2>HTTP status code <a href="http://httpstatus.es/200" target="_blank">200</a></h2><p>the list of all tasks waiting to be scheduled.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{
  "queue": [
    {
      "app": {
        "id": "/tools/datadog-agent",
        "cmd": null,
        "args": null,
        "user": null,
        "env": { },
        "instances": 5,
        "cpus": 1.0,
        "mem": 512.0,
        "disk": 0.0,
        "executor": "",
        "constraints": [
          [
            "hostname",
            "UNIQUE"
          ]
        ],
        "uris": [],
        "storeUrls": [],
        "ports": [
          10018
        ],
        "requirePorts": false,
        "backoffSeconds": 1,
        "backoffFactor": 1.15,
        "maxLaunchDelaySeconds": 3600,
        "container": {
          "type": "DOCKER",
          "volumes": [ ],
          "docker": {
            "image": "datadog/docker-dd-agent:latest",
            "network": "HOST",
            "privileged": true,
            "parameters": [],
            "forcePullImage": false
          }
        },
        "healthChecks": [],
        "dependencies": [],
        "upgradeStrategy": {
          "minimumHealthCapacity": 0.5,
          "maximumOverCapacity": 0.0
        },
        "labels": {},
        "acceptedResourceRoles": null,
        "version": "2015-08-26T22:33:24.225Z",
        "versionInfo": {
          "lastScalingAt": "2015-08-26T22:33:24.225Z",
          "lastConfigChangeAt": "2015-05-19T13:59:18.899Z"
        }
      },
      "count": 1,
      "delay": {
        "timeLeftSeconds": 0,
        "overdue": true
      }
    },
    {
      "app": {
        "id": "/foo",
        "cmd": null,
        "args": null,
        "user": "root",
        "env": {
          "MASTER": "zk://172.16.0.12:2181,172.16.0.13:2181,172.16.0.14:2181/mesos"
        },
        "instances": 1,
        "cpus": 0.5,
        "mem": 128.0,
        "disk": 0.0,
        "executor": "//cmd",
        "constraints": [
          [
            "hostname",
            "UNIQUE"
          ]
        ],
        "uris": [
          "http://www.mesosphere.io/index.html"
        ],
        "storeUrls": [],
        "ports": [
          10010
        ],
        "requirePorts": false,
        "backoffSeconds": 1,
        "backoffFactor": 1.15,
        "maxLaunchDelaySeconds": 3600,
        "container": {
          "type": "DOCKER",
          "volumes": [],
          "docker": {
            "image": "thomasr/dispatch",
            "network": "HOST",
            "privileged": false,
            "parameters": [],
            "forcePullImage": false
          }
        },
        "healthChecks": [],
        "dependencies": [],
        "upgradeStrategy": {
          "minimumHealthCapacity": 1.0,
          "maximumOverCapacity": 1.0
        },
        "labels": {},
        "acceptedResourceRoles": null,
        "version": "2015-09-30T09:09:17.614Z",
        "versionInfo": {
          "lastScalingAt": "2015-09-30T09:09:17.614Z",
          "lastConfigChangeAt": "2015-09-30T09:09:17.614Z"
        }
      },
      "count": 2,
      "delay": {
        "timeLeftSeconds": 0,
        "overdue": true
      }
    }
  ]
}</code></pre><h2>HTTP status code <a href="http://httpstatus.es/401" target="_blank">401</a></h2><p>Unauthorized. Authentication is enabled and you did not provide enough or wrong information to authenticate that request.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{ "message": "Invalid username or password." }
</code></pre><h2>HTTP status code <a href="http://httpstatus.es/403" target="_blank">403</a></h2><p>Forbidden. Authorization is granted but the identity provided does not have sufficient access rights to do that action.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{ "message": "Not Authorized to perform this action!" }
</code></pre></div></div></div></div></div></div></div><div class="panel panel-white"><div class="panel-heading"><h4 class="panel-title"><a class="collapsed" data-toggle="collapse" href="#panel_v2_queue__app_id__delay"><span class="parent">/v2/queue</span>/{app_id}/delay</a> <span class="methods"><a href="#v2_queue__app_id__delay_delete"><span class="badge badge_delete">delete</span></a></span></h4></div><div id="panel_v2_queue__app_id__delay" class="panel-collapse collapse"><div class="panel-body"><div class="list-group"><div onclick="window.location.href = '#v2_queue__app_id__delay_delete'" class="list-group-item"><span class="badge badge_delete">delete</span><div class="method_description"><p>If an application fails too often in a specified amount of time (according to the application definition), the task launch will be delayed. This delay can be removed by calling this endpoint. The effect is, that the tasks of this application will be launched immediately.</p></div><div class="clearfix"></div></div></div></div></div><div class="modal fade" tabindex="0" id="v2_queue__app_id__delay_delete"><div class="modal-dialog"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button><h4 class="modal-title" id="myModalLabel"><span class="badge badge_delete">delete</span> <span class="parent">/v2/queue</span>/{app_id}/delay</h4></div><div class="modal-body"><div class="alert alert-info"><p>If an application fails too often in a specified amount of time (according to the application definition), the task launch will be delayed. This delay can be removed by calling this endpoint. The effect is, that the tasks of this application will be launched immediately.</p></div><ul class="nav nav-tabs"><li class="active"><a href="#v2_queue__app_id__delay_delete_request" data-toggle="tab">Request</a></li><li><a href="#v2_queue__app_id__delay_delete_response" data-toggle="tab">Response</a></li></ul><div class="tab-content"><div class="tab-pane active" id="v2_queue__app_id__delay_delete_request"><h3>URI Parameters</h3><ul><li><strong>app_id</strong>: <em>required (string)</em></li></ul></div><div class="tab-pane" id="v2_queue__app_id__delay_delete_response"><h2>HTTP status code <a href="http://httpstatus.es/200" target="_blank">200</a></h2><p>the delay is reset and no body is returned</p><h2>HTTP status code <a href="http://httpstatus.es/404" target="_blank">404</a></h2><p>there is no delay for the given application with id <code>app_id</code></p></div></div></div></div></div></div></div></div></div></div><div class="panel panel-default"><div class="panel-heading"><h3 id="ping" class="panel-title">/ping</h3></div><div class="panel-body"><div class="panel-group"><div class="panel panel-white"><div class="panel-heading"><h4 class="panel-title"><a class="collapsed" data-toggle="collapse" href="#panel_ping"><span class="parent"></span>/ping</a> <span class="methods"><a href="#ping_get"><span class="badge badge_get">get</span></a></span></h4></div><div id="panel_ping" class="panel-collapse collapse"><div class="panel-body"><div class="list-group"><div onclick="window.location.href = '#ping_get'" class="list-group-item"><span class="badge badge_get">get</span><div class="method_description"><p>Ping this Marathon instance.</p></div><div class="clearfix"></div></div></div></div></div><div class="modal fade" tabindex="0" id="ping_get"><div class="modal-dialog"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button><h4 class="modal-title" id="myModalLabel"><span class="badge badge_get">get</span> <span class="parent"></span>/ping</h4></div><div class="modal-body"><div class="alert alert-info"><p>Ping this Marathon instance.</p></div><ul class="nav nav-tabs"><li class="active"><a href="#ping_get_response" data-toggle="tab">Response</a></li></ul><div class="tab-content"><div class="tab-pane active" id="ping_get_response"><h2>HTTP status code <a href="http://httpstatus.es/200" target="_blank">200</a></h2><p>Every ping is answered with a pong.</p><h3>Body</h3><p><strong>Type: text/plain</strong></p><p><strong>Example</strong>:</p><pre><code>pong</code></pre></div></div></div></div></div></div></div></div></div></div><div class="panel panel-default"><div class="panel-heading"><h3 id="metrics" class="panel-title">/metrics</h3></div><div class="panel-body"><div class="panel-group"><div class="panel panel-white"><div class="panel-heading"><h4 class="panel-title"><a class="collapsed" data-toggle="collapse" href="#panel_metrics"><span class="parent"></span>/metrics</a> <span class="methods"><a href="#metrics_get"><span class="badge badge_get">get</span></a></span></h4></div><div id="panel_metrics" class="panel-collapse collapse"><div class="panel-body"><div class="list-group"><div onclick="window.location.href = '#metrics_get'" class="list-group-item"><span class="badge badge_get">get</span><div class="method_description"><p>Get metrics data from this Marathon instance</p></div><div class="clearfix"></div></div></div></div></div><div class="modal fade" tabindex="0" id="metrics_get"><div class="modal-dialog"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button><h4 class="modal-title" id="myModalLabel"><span class="badge badge_get">get</span> <span class="parent"></span>/metrics</h4></div><div class="modal-body"><div class="alert alert-info"><p>Get metrics data from this Marathon instance</p></div><ul class="nav nav-tabs"><li class="active"><a href="#metrics_get_response" data-toggle="tab">Response</a></li></ul><div class="tab-content"><div class="tab-pane active" id="metrics_get_response"><h2>HTTP status code <a href="http://httpstatus.es/200" target="_blank">200</a></h2><p>All aggregated runtime metrics for this Marathon instance.</p><h3>Body</h3><p><strong>Type: application/json</strong></p><p><strong>Example</strong>:</p><pre><code>{
  "counters": {
    "name.of.counter": {
      "count": 1
    }
  },
  "gauges": {
    "name.of.gauge": {
      "value": 7248
    }
  },
  "histograms": {
    "name.of.histogram": {
      "count": 0,
      "max": 0,
      "mean": 0.0,
      "min": 0,
      "p50": 0.0,
      "p75": 0.0,
      "p95": 0.0,
      "p98": 0.0,
      "p99": 0.0,
      "p999": 0.0,
      "stddev": 0.0
    }
  },
  "meters": {
    "name.of.meter": {
      "count": 0,
      "m15_rate": 0.0,
      "m1_rate": 0.0,
      "m5_rate": 0.0,
      "mean_rate": 0.0,
      "units": "events/second"
    }
  },
  "timers": {
    "name.of.timer": {
      "count": 1,
      "duration_units": "seconds",
      "m15_rate": 0.2,
      "m1_rate": 0.2,
      "m5_rate": 0.2,
      "max": 0.0021718640000000003,
      "mean": 0.0021718640000000003,
      "mean_rate": 0.13897812037014803,
      "min": 0.0021718640000000003,
      "p50": 0.0021718640000000003,
      "p75": 0.0021718640000000003,
      "p95": 0.0021718640000000003,
      "p98": 0.0021718640000000003,
      "p99": 0.0021718640000000003,
      "p999": 0.0021718640000000003,
      "rate_units": "calls/second",
      "stddev": 0.0
    }
  },
  "version": "3.0.0"
}
</code></pre></div></div></div></div></div></div></div></div></div></div></div><div class="col-md-3"><div id="sidebar" class="hidden-print affix" role="complementary"><ul class="nav nav-pills nav-stacked"><li><a href="#v2_apps">/v2/apps</a></li><li><a href="#v2_deployments">/v2/deployments</a></li><li><a href="#v2_groups">/v2/groups</a></li><li><a href="#v2_groups__group_id_">/v2/groups/{group_id}</a></li><li><a href="#v2_tasks">/v2/tasks</a></li><li><a href="#v2_artifacts">/v2/artifacts</a></li><li><a href="#v2_events">/v2/events</a></li><li><a href="#v2_eventSubscriptions">/v2/eventSubscriptions</a></li><li><a href="#v2_info">/v2/info</a></li><li><a href="#v2_leader">/v2/leader</a></li><li><a href="#v2_plugins">/v2/plugins</a></li><li><a href="#v2_queue">/v2/queue</a></li><li><a href="#ping">/ping</a></li><li><a href="#metrics">/metrics</a></li></ul></div></div></div></div></body></html>